2012-11-29 17 views
8

Ho provato diversi modi per ottenere le dimensioni dello schermo del dispositivo, ma mi ha sempre restituito la dimensione sbagliata (791x480 anziché 854x480), potrebbe essere dovuto alla barra di navigazione. Il mio dispositivo è attualmente in esecuzione JellyBean 4.1.1.Android: come ottenere le dimensioni reali dello schermo del dispositivo?

ho provato:

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

E:

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

Sto utilizzando il seguente codice per rendere lo schermo intero app:

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

ho notato che nel logcat viene restituita la giusta dimensione:

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

Nel mio AndroidManifest:

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

ho usato:

Perché non sono io un per ottenere la dimensione reale (480x854)? O come posso utilizzare la superficie restituita dal "Device riconfigurato"?

+1

try getRealMetrics http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics) – Jameo

+0

Sono confuso. Stai chiedendo come ottenere la dimensione fisica del dispositivo, quindi dici di ottenere la dimensione meno la barra di navigazione. Quindi dici di avere le dimensioni fisiche del dispositivo. Dov'è esattamente il tuo problema? – DeeV

+0

@deev Hai ragione, ti sto chiedendo come ottenere la dimensione fisica del dispositivo, suppongo solo che la dimensione restituita sia quella meno la barra di navigazione. Sto chiedendo un modo per scrivere un codice che fornirà le dimensioni fisiche per qualsiasi dispositivo. – Trois

risposta

5

provare a chiamare

display.getRealSize(); 

NOTA BENE: non mi rendevo conto, ma questo funziona solo per API 17 (Android 4.2/Jellybean) e fino.

+2

A partire dalla versione 4.2 – W55tKQbuRu28Q4xv

10

Prova questa

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

non dovrebbe essere JELLY_BEAN_MR1 e non JELLY_BEAN essere> = 17? – ThomasRS

+0

Sono d'accordo Thomas, dovrebbe essere JELLY_BEAN_MR1. – Ethan

0

stavo affrontando lo stesso problema su un tablet Android 3.2. Ho testato sia getRealSize che getDisplayMetrics. Ci si aspetta che si blocchino perché volevano essere disponibili sull'API 17. Ma stranamente GetDisplayMetrics non si arresta in modo anomalo sul mio 3.2 e restituisce la dimensione corretta. getRealSize si arresta in modo anomalo.

Problemi correlati