Androidで利用可能な画面の高さを取得するにはどうすればよいですか? ステータスバー/メニューバー、または画面に表示される可能性のあるその他の装飾を差し引いた高さが必要であり、すべてのデバイスで機能する必要があります。また、onCreate関数でこれを知る必要があります。この質問が以前に尋ねられたことは知っていますが、すでに解決策を試しましたが、どれも機能しません。ここに私が試したことのいくつかがあります:
これはステータスバー/メニューバーを考慮していません:
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 で理想的に動作する必要があります。