Вы получаете меньший размер, потому что панель навигации занимает некоторое пространство, и getWindowManager().getDefaultDisplay().getMetrics(displayMetrics)
вернет только доступный размер экрана .
Официально документированного способа получения полноэкранного размера не существует, однако есть некоторые обходные пути:
- Вы можете получить размер экрана после того, как ваша активность перейдет в полноэкранный режим . Это должно скрыть панель навигации.
Вы можете получить размер навигационной панели и добавить его к размеру экрана, который вы получили в своем коде:
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
Вы можете получить весь экран размером:
public static Point getRealScreenSize(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT >= 17) {
display.getRealSize(size);
} else if (Build.VERSION.SDK_INT >= 14) {
try {
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {}
}
return size;
}
Методы 2 и 3 являются хакерами, поэтому имейте в виду, что на некоторых устройствах у них есть шанс на сбой.