Android:如何获得设备的真实屏幕尺寸?

问题描述 投票:11回答:4

我已经尝试了不同的方法来获取设备的屏幕尺寸,但它总是返回我错误的大小(791x480而不是854x480)。这可能是由于导航栏。我的设备当前正在运行JellyBean 4.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)?或者我如何使用“设备重新配置”返回的表面?

android resolution
4个回答
7
投票

试着打电话

    display.getRealSize();

免责声明:我没有意识到这一点,但这只适用于API 17(Android 4.2 / JellyBean)及以上版本。


11
投票

试试这个

 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();
        }
    }

0
投票

我在Android 3.2平板电脑上遇到了同样的问题。我测试了getRealSize和getDisplayMetrics。它们预计会崩溃,因为它们意味着可以在API 17上使用。但奇怪的是,getDisplayMetrics不会在我的3.2上崩溃并返回正确的维度。 getRealSize崩溃了。


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());

        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.