如何获得真正的屏幕高度和宽度?

use*_*240 40 android

DisplayMetrics metrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
Run Code Online (Sandbox Code Playgroud)

我使用这些代码来获取屏幕的高度和宽度

我的Nexus7的屏幕高度应为1280

但它返回1205 ...

我的minSdkVersion是8级

所以我不能使用这些方法:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screen_width = size.x;
int screen_height = size.y;
Run Code Online (Sandbox Code Playgroud)

现在,我应该如何获得正确的屏幕尺寸?

编辑:

if (Build.VERSION.SDK_INT >= 11) {
        Point size = new Point();
        try {
            this.getWindowManager().getDefaultDisplay().getRealSize(size);
            screenWidth = size.x;
            screenHeight = size.y;
        } catch (NoSuchMethodError e) {
            Log.i("error", "it can't work");
        }

    } else {
        DisplayMetrics metrics = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        screenWidth = metrics.widthPixels;
        screenHeight = metrics.heightPixels;
    }
Run Code Online (Sandbox Code Playgroud)

用它有效!

Cor*_*han 46

我写了一个方法,尽可能接近API 10到17+.它应该为API 14+提供真正的宽度和高度,并且它可以用于其他所有内容.

    Display display = context.getWindowManager().getDefaultDisplay();
    int realWidth;
    int realHeight;

    if (Build.VERSION.SDK_INT >= 17){
        //new pleasant way to get real metrics
        DisplayMetrics realMetrics = new DisplayMetrics();
        display.getRealMetrics(realMetrics);
        realWidth = realMetrics.widthPixels;
        realHeight = realMetrics.heightPixels;

    } else if (Build.VERSION.SDK_INT >= 14) {
        //reflection for this weird in-between time
        try {
            Method mGetRawH = Display.class.getMethod("getRawHeight");
            Method mGetRawW = Display.class.getMethod("getRawWidth");
            realWidth = (Integer) mGetRawW.invoke(display);
            realHeight = (Integer) mGetRawH.invoke(display);
        } catch (Exception e) {
            //this may not be 100% accurate, but it's all we've got
            realWidth = display.getWidth();
            realHeight = display.getHeight();
            Log.e("Display Info", "Couldn't use reflection to get the real display metrics.");
        }

    } else {
        //This should be close, as lower API devices should not have window navigation bars
        realWidth = display.getWidth();
        realHeight = display.getHeight();
    }
Run Code Online (Sandbox Code Playgroud)

  • 哦,男人,谢谢你....究竟这个****'简单的东西可以是这个复杂的...超出我...应该是1行:getScreenDimensions()!把你的狗屎搞得一团糟. (2认同)

gge*_*ish 35

我认为这会奏效.诀窍是你必须使用:

display.getRealSize(size);
Run Code Online (Sandbox Code Playgroud)

display.getSize(size);
Run Code Online (Sandbox Code Playgroud)

要处理您的API 8编码问题,请执行以下操作:

try { 
    display.getRealSize(size);
    height = size.y; 
} catch (NoSuchMethodError e) {
    height = display.getHeight();
}
Run Code Online (Sandbox Code Playgroud)

只有更新的API设备才会有屏幕导航按钮,因此需要新方法,旧设备会抛出异常,但不会有屏幕导航,因此较旧的方法很好.

如果需要说:只是因为你的项目的最低API级别为8并不意味着你必须在那个级别编译它.我也使用8级作为最低限度,但我的项目大多是在13级(3.2)编译,使他们可以访问许多新方法.

  • 请记住,此方法不适用于API级别14,15和16,因为`getRealSize()`方法仅在API级别17中引入.以下是查找原始值的解决方法<API 17:http:// stackoverflow.com/questions/10991194/android-displaymetrics-returns-incorrect-screen-size-in-pixels-on-ics (3认同)
  • 您可以检查设备上的api级别,而不是使用try-catch块.请参阅Build.VERSION和方法Display.getHeight,Display.getSize,display.getRealSize (2认同)

Aya*_*fov 5

您可以使用以下命令找到真实的设备尺寸DisplayDisplayMetrics

使用显示:

private void findRealSize(Activity activity)
{
    Point size = new Point();
    Display display = activity.getWindowManager().getDefaultDisplay();

    if (Build.VERSION.SDK_INT >= 17)
        display.getRealSize(size);
    else
        display.getSize(size);

    int realWidth = size.x;
    int realHeight = size.y;

    Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}
Run Code Online (Sandbox Code Playgroud)

使用显示指标:

private void findRealSize(Activity activity)
{
    DisplayMetrics displayMetrics = new DisplayMetrics();

    if (Build.VERSION.SDK_INT >= 17)
    {
        activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
    }
    else
    {
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    }

    int realWidth = displayMetrics.widthPixels;
    int realHeight = displayMetrics.heightPixels;

    Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

41155 次

最近记录:

6 年,7 月 前