13

デバイスの画面サイズを取得するためにさまざまな方法を試しましたが、常に間違ったサイズが返されました(791x480ではなく854x480)。ナビゲーションバーが原因である可能性があります。私のデバイスは現在JellyBean4.1.1を実行しています。

私は試した:

Display display = getWindowManager().getDefaultDisplay();  
Point size = new Point();
display.getSize(size);
OpenGLRenderer.widthScreen = size.x;
OpenGLRenderer.heightScreen = size.y;

と:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
String resolution = dm.widthPixels + "x" + dm.heightPixels;

次のコードを使用して、アプリを全画面表示にします。

setContentView(mGLSurfaceView);
mGLSurfaceView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

logcatで、正しいサイズが返されることに気づきました。

01-01 03:05:06.967: I/InputReader(1961): 
    Device reconfigured: id=8, name='cyttsp-spi', 
    surface size is now 480x854, mode is 1

私の中でAndroidManifest

uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"

私が使用した:

480x854実際のサイズ( )を取得できないのはなぜですか?または、「再構成されたデバイス」によって返されたサーフェスをどのように使用できますか?

4

4 に答える 4

14

電話してみてください

    display.getRealSize();

免責事項: 私はこれに気づいていませんでしたが、これはAPI 17(Android 4.2 / JellyBean)以降でのみ機能します。

于 2012-11-29T16:00:43.137 に答える
12

これを試して

 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{
    // Below Jellybeans you can use reflection method 

        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:58:42.450 に答える
0

Android3.2タブレットでも同じ問題に直面していました。getRealSizeとgetDisplayMetricsの両方をテストしました。API 17で利用できるように意図されているため、クラッシュすることが予想されます。しかし、奇妙なことに、getDisplayMetricsは3.2でクラッシュせず、正しいディメンションを返します。getRealSizeがクラッシュします。

于 2014-01-03T19:57:18.430 に答える
0

アクティビティのサイズを取得したい場合は、次のコードで取得できます。

findViewById(android.R.id.content).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            View view =  findViewById(android.R.id.content);
            Log.e("test", "root view height is " + view.getHeight());

        }
    });
于 2018-06-22T08:27:31.797 に答える