Android:获得真正的屏幕尺寸

lia*_*ker 2 android screen android-layout

从API 17开始,可以获得手机的实际屏幕尺寸:

if (android.os.Build.VERSION.SDK_INT >= 17){
            display.getRealSize(size);
            int screen_width = size.x;
            screen_height = size.y;
} else {...}
Run Code Online (Sandbox Code Playgroud)

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

lia*_*ker 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;
}
Run Code Online (Sandbox Code Playgroud)