Android:获得真正的屏幕尺寸

时间:2014-07-09 15:24:53

标签: android android-layout screen

从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条件的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

以下是我在所有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;
}

答案 1 :(得分:1)

试试这段代码:

display.getRealSize();

有关此链接的更多信息:

http://developer.android.com/reference/android/view/Display.html

你看看网址:

https://stackoverflow.com/a/1016941/3821823

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

答案 2 :(得分:-1)

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

编辑替代解决方案

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

来自文档:

  

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

如果即使在这些方法之后设备仍坚持不给它真正的尺寸,我也不相信如果不编辑设备上的build.prop文件就可以做很多事情。< / p>