Как я могу получить доступную высоту экрана в Android? Мне нужна высота за вычетом строки состояния или строки меню или любых других украшений, которые могут быть на экране, и мне нужно, чтобы она работала на всех устройствах. Кроме того, мне нужно знать это в функции onCreate. Я знаю, что этот вопрос задавали раньше, но я уже пробовал их решения, и никто из них не работает. Вот некоторые из вещей, которые я попробовал:Как получить высоту экрана в Android?
Это не принимает во внимание строку в строке состояния/меню:
Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
Ни делает это:
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
Также это:
Point size = new Point();
getWindowManager().getDefaultDisplay().getRealSize(size);
screenWidth = size.x;
screenHeight = size.y;
Это не работает:
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
// since SDK_INT = 1;
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
try
{
// used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
screenHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
}
catch (Exception ignored)
{
// Do nothing
}
try
{
// used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
screenWidth = realSize.x;
screenHeight = realSize.y;
}
catch (Exception ignored)
{
// Do nothing
}
Затем я использовал следующий код, чтобы вычесть высоту строки состояния и строки меню с высоты экрана:
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
result = getResources().getDimensionPixelSize(resourceId);
screenHeight -= result;
result = 0;
if (screenHeight >= screenWidth)
resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
else
resourceId = getResources().getIdentifier("navigation_bar_height_landscape", "dimen", "android");
if (resourceId > 0)
result = getResources().getDimensionPixelSize(resourceId);
screenHeight -= result;
На API 17 он дает правильно вычисляет высоту строки состояния и меню бар в портрете, но не в ландшафте. На API 10, она возвращает 0. Мне нужно работать в идеале на всех устройствах или минимального API 10.
Вы пробовали это код: http://stackoverflow.com/a/13026919/611600 – Ali
Да, я пробовал это. См. Мой ответ ниже. Спасибо –
Возможный дубликат [Получить высоту экрана в Android] (http://stackoverflow.com/questions/17353822/get-the-screen-height-in-android) –