安卓:获取真实屏幕尺寸

4
自API 17以来,可以通过以下代码获取手机的实际屏幕尺寸:
if (android.os.Build.VERSION.SDK_INT >= 17){
            display.getRealSize(size);
            int screen_width = size.x;
            screen_height = size.y;
} else {...}

我想在API 8-16中获取真实的屏幕尺寸。在这种情况下,处理else条件语句的最佳方法是什么?


2
这完全取决于你的应用程序的目的,不是吗? - slhck
@slhck 你说得对,我刚刚进行了编辑。 - liarspocker
3个回答

7
以下是我获取所有API上实际屏幕高度的解决方案。当设备具有物理导航栏时,dm.heightPixels返回实际高度。当设备具有软件导航栏时,它返回减去导航栏的总高度。我只在一些设备上进行了测试,但目前为止这种方法可行。
int navBarHeight = 0;
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
    navBarHeight = resources.getDimensionPixelSize(resourceId);
}

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

boolean hasPhysicalHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);
if (android.os.Build.VERSION.SDK_INT >= 17){
    display.getRealSize(size);
    int screen_width = size.x;
    screen_height = size.y;
} else if (hasPhysicalHomeKey){
    screen_height = dm.heightPixels;
} else {
    screen_height = dm.heightPixels + navBarHeight;
}

0

display.getRealSize() 只在 API 17+ 中可用,因此在 API 8-16 中无法使用,就像问题所问的那样。 - Sean McManus

-2
else{
   display.getWidth()
   display.getHeight()
}

编辑:替代解决方案

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.widthPixels
metrics.heightPixels

来自文档:

以像素为单位的显示屏绝对宽度。

如果即使在使用这些方法后设备仍然坚持不提供其真实尺寸,我认为除非编辑设备上的 build.prop 文件,否则你将无法做太多事情。


这会包括软件导航栏的大小吗? - liarspocker
1
我在一台安卓4.1的ZTE U930HD上尝试了一下,返回的结果是1184(总高度减去导航栏的高度)。 - liarspocker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接