如何在libgdx中检测设备是智能手机还是平板电脑?

时间:2015-03-24 23:48:57

标签: android xml android-layout libgdx scene2d

我想在我的scene2d ui中使用某个ui元素在较大的屏幕上缩放(不一定是更高的分辨率屏幕)。它在Android布局中非常简单,但如何让它在libgdx中运行。也许我错过了一些API?

可以通过Androidactivity中的界面完成吗? 我能想到的当前解决方案是在differend布局文件夹(values-sw600等)中声明一个标志,并在oncreate()中的androidactivity中获取它,然后通过接口将其传递给libgdx。 请建议是否有更好的方式

2 个答案:

答案 0 :(得分:2)

如果有人仍然对更简单的解决方法感到好奇,您可以使用LibGDX方法Gdx.graphics.getDensity();。这将返回屏幕的像素密度,并可以转换为英寸测量值。 计算:

public float getScreenSizeInches () {
    //According to LibGDX documentation; getDensity() returns a scalar value for 160dpi.
    float dpi = 160 * Gdx.graphics.getDensity();
    float widthInches = Gdx.graphics.getWidth() / dpi;
    float heightInches = Gdx.graphics.getHeight() / dpi;

    //Use the pythagorean theorem to get the diagonal screen size
    return Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
}

我实际上没有对此进行过测试,但理论上它应该可行。如果没有,请告诉我。

答案 1 :(得分:0)

由于Gdx.graphics.getWidth()仅返回视口的大小,而不是屏幕本身,因此vedi0boy提出的解决方案无法正确处理PC平台。

这是适用于所有平台的解决方案

public static double getScreenSizeInches()
{
    // Use the primary monitor as baseline
    // It would also be possible to get the monitor where the window is displayed
    Graphics.Monitor primary = Gdx.graphics.getPrimaryMonitor();
    Graphics.DisplayMode displayMode = Gdx.graphics.getDisplayMode(primary);

    float dpi = 160 * Gdx.graphics.getDensity();
    float widthInches = displayMode.width / dpi;
    float heightInches = displayMode.height / dpi;

    //Use the pythagorean theorem to get the diagonal screen size
    return Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
}