Trois
Trois

Reputation: 133

Android: How to get the real screen size of the device?

I have tried different ways to get the screen size of the device, but it always returned me the wrong size (791x480 instead of 854x480). It might be due to the navigation bar. My device is currently running JellyBean 4.1.1.

I tried:

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

And:

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

I'm using the following code to make the app full screen:

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

I noticed that in the logcat, the right size is returned:

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

In my AndroidManifest:

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

I used:

Why am I not able to get the real size (480x854)? Or how can I use the surface returned by the “Device reconfigured”?

Upvotes: 13

Views: 15435

Answers (4)

Liu Tom
Liu Tom

Reputation: 397

if you want to get the size in the activity, you can make it by the following code.

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

        }
    });

Upvotes: 0

Herve Thu
Herve Thu

Reputation: 1267

I was facing the same problem on an Android 3.2 tablet. I tested both getRealSize and getDisplayMetrics. They are expected to crash as they meant to be available on API 17. But strangely getDisplayMetrics doesn't crash on my 3.2 and returns the correct dimension. getRealSize crashes.

Upvotes: 0

Andrew Campbell
Andrew Campbell

Reputation: 18705

Try calling

    display.getRealSize();

DISCLAIMER: I did not realize this, but this will only work for API 17 (Android 4.2/JellyBean) and up.

Upvotes: 14

Ahmed
Ahmed

Reputation: 824

Try this

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

Upvotes: 13

Related Questions