6

通常の使用では、DisplayMetrics クラスを使用して「レンダリング可能な」サイズを取得できますが、仮想ボタンの高さを含む実際の物理画面サイズを把握したいと考えています。

私のGalaxy Nexusでは、何を試しても報告されたサイズは1196x720ですが、1280x720の物理サイズを取得するには何を使用できますか? Nexus 7、Nexus 4、Nexus 10 デバイスについても同様です。

更新:これは、修正を含む、現在使用している最終的なコードです:

    //Activity A = this;
    DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager wm = (WindowManager) A.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
    Display disp = wm.getDefaultDisplay();

    int API_LEVEL =  android.os.Build.VERSION.SDK_INT;
    if (API_LEVEL >= 17)
    {
        disp.getRealMetrics(displayMetrics);
    }
    else
    {
        disp.getMetrics(displayMetrics);
    }

    int Width = displayMetrics.widthPixels;
    int Height = displayMetrics.heightPixels;
4

2 に答える 2

6

Display.getRealSize(Point)を使用する必要がありますここの公式ドキュメントから

表示領域は、2 つの異なる方法で記述されます。

アプリケーション表示領域は、システムの装飾を除いて、アプリケーション ウィンドウを含む可能性のあるディスプレイの部分を指定します。

アプリケーションの表示領域は、システムがステータス バーなどの装飾要素に必要なスペースを差し引くため、実際の表示領域よりも小さい場合があります。次のメソッドを使用して、アプリケーションの表示領域を照会します: getSize(Point)、getRectSize(Rect)、および getMetrics(DisplayMetrics)。

実際の表示領域は、システム装飾を含むコンテンツを含む表示の一部を指定します。それでも、ウィンドウ マネージャーが (adb shell am display-size) を使用して小さいディスプレイをエミュレートしている場合、実際のディスプレイ領域はディスプレイの物理サイズよりも小さい場合があります。次のメソッドを使用して、実際の表示領域を照会します: getRealSize(Point)、getRealMetrics(DisplayMetrics)。

于 2013-05-12T00:48:29.110 に答える
4

同様の質問の回答には、API < 17 https://stackoverflow.com/a/15699681/601298の場合にディスプレイの実際のサイズを取得するための解決策があるようです

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}
于 2013-11-25T08:09:50.417 に答える