24

私はこれを試しました....

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int fullscreenheight = metrics.heightPixels;
int fullscreenwidth = metrics.widthPixels;

と....

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Gnex のディスプレイは 720×1280 です。幅/高さの返される結果 (もちろん方向によって異なります) は決して 1280 ではありません。これは、Ice Cream Sandwich の画面上のナビゲーション バーと関係があるのではないかと考えたので、次のように非表示にします。

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

...そして、画面サイズの高さ/幅を継続的に記録するスレッドを開始しました。ICS ナビゲーション バーが完全になくなった後でも....画面サイズが 1280 の値を報告することはありませんでした。次のような数値が得られます。

width  = 720
height = 1184

ICS で実際のデバイスの画面解像度を取得するにはどうすればよいですか?

この値が必要な理由は、アプリがビデオを再生し、デバイスが横向きのときにビデオが画面全体を占めるようにしたいからです。あなたが考えていることがわかりました。高さ/幅の「match_parent」の値をビデオビューに与えてみませんか? その理由は、私のビデオには複数の縦横比があり、画面の幅全体に応じて正しいビデオ サイズを計算できるようにしたいからです。

4

6 に答える 6

20

私はこの隠された宝物を ICS のみで見つけました......ICS よりも上位の API をターゲットにしている場合は、以下の Chris Schmich によるコメントを参照してください。

Android ICS ビルドでナビゲーション バーを非表示および表示する方法

リンクが切れた場合に備えて....実際のデバイスの画面サイズを取得する方法は次のとおりです.....

Display display = getWindowManager().getDefaultDisplay();     
Method mGetRawH = Display.class.getMethod("getRawHeight");
Method mGetRawW = Display.class.getMethod("getRawWidth");
int rawWidth = (Integer) mGetRawW.invoke(display);
int rawHeight = (Integer) mGetRawH.invoke(display);

編集(11/19/12)

上記のコードは Android 4.2 では機能せず、例外がスローされます.... Android 4.2 でデバイスの全画面サイズを取得する方法をまだ見つけていません。私がそうするとき、私はこの答えを編集しますが、今のところ、Android 4.2の不測の事態を考慮してコーディングする必要があります!!

于 2012-06-12T21:06:02.263 に答える
11

を使用getRealSizeして画面解像度を取得できます。API 17 以降で正式にサポートされていますが、実際には API 14 以降の SDK に存在していました。API 17 以降の SDK プラットフォームを使用する場合は、メソッドに通常どおりアクセスでき、API でのみ使用可能であるという警告をバイパスできます。 17.

/**
 * Gets the device's native screen resolution rotated
 * based on the device's current screen orientation.
 */
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) //To remove warning about using
                                               //getRealSize prior to API 17
private Point screenResolution() {
    WindowManager windowManager =
        (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = windowManager.getDefaultDisplay();
    Point screenResolution = new Point();

    if (Build.VERSION.SDK_INT < 14)
        throw new RuntimeException("Unsupported Android version.");
    display.getRealSize(screenResolution);

    return screenResolution;    
}

私はこれを実際の Android 5.0.2 デバイスと 4.1.1 を実行しているエミュレーター (およびおそらく他のデバイス) でテストしました。

コメントでこれを指摘してくれたbencに感謝します。

于 2015-02-28T11:23:07.150 に答える
6

これを試して

    final DisplayMetrics metrics = new DisplayMetrics(); 
    Display display = getWindowManager().getDefaultDisplay();     
    Method mGetRawH = null,mGetRawW = null;

    try {
                    // For JellyBeans and onward
        if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN){
            display.getRealMetrics(metrics);

            realWidth = metrics.widthPixels;
            realHeight = metrics.heightPixels;
        }else{
            mGetRawH = Display.class.getMethod("getRawHeight");
            mGetRawW = Display.class.getMethod("getRawWidth");

            try {
                realWidth = (Integer) mGetRawW.invoke(display);
                realHeight = (Integer) mGetRawH.invoke(display);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
于 2013-04-29T10:51:31.737 に答える
3
public static Point getRealSize(Display display) {
        Point outPoint = new Point();
        Method mGetRawH;
        try {
            mGetRawH = Display.class.getMethod("getRawHeight");
            Method mGetRawW = Display.class.getMethod("getRawWidth");
            outPoint.x = (Integer) mGetRawW.invoke(display);
            outPoint.y = (Integer) mGetRawH.invoke(display);
            return outPoint;
        } catch (Throwable e) {
            return null;
        }
    }

    public static Point getSize(Display display) {
        if (Build.VERSION.SDK_INT >= 17) {
            Point outPoint = new Point();
            DisplayMetrics metrics = new DisplayMetrics();
            display.getRealMetrics(metrics);
            outPoint.x = metrics.widthPixels;
            outPoint.y = metrics.heightPixels;
            return outPoint;
        }
        if (Build.VERSION.SDK_INT >= 14) {
            Point outPoint = getRealSize(display);
            if (outPoint != null)
                return outPoint;
        }
        Point outPoint = new Point();
        if (Build.VERSION.SDK_INT >= 13) {
            display.getSize(outPoint);
        } else {
            outPoint.x = display.getWidth();
            outPoint.y = display.getHeight();
        }
        return outPoint;
    }
于 2014-02-12T19:00:51.087 に答える
1

タブレットなどの一部のデバイスでは、バックアップとしてのハードウェア ボタンがないため、ナビゲーション バーをまったく非表示にすることはできません ( source 、「システム UI 表示のコントロール」セクションを参照)。ただし、デバイスでバーを非表示にできた場合は、フルスクリーン ビューを作成し、getWidth() と getHeight() でそのサイズをリクエストできます。

私の知る限り、すべての ICS デバイスで画面サイズを取得する信頼できる方法はありません。

于 2012-06-12T06:13:11.870 に答える