2010-05-25 15 views
9

questa è una domanda molto semplice su cui non ho trovato risposta:/ Come posso accedere rapidamente alla risoluzione dello schermo (larghezza, altezza) come valori interi?Android: Ottieni la risoluzione dello schermo/pixel come valori interi

Ho provato questo, ma si vede sempre zero sul mio emulatore:

DisplayMetrics dm = new DisplayMetrics(); 
int width = dm.widthPixels/2; 

Nel mio caso voglio creare dinamicamente una tabella con tableRows, ciascuno dei quali contiene due colli. Questo cols tutto deve riempire la metà dello schermo in larghezza.

Qualcuno può darmi un suggerimento?

+0

solo una supposizione - i valori recuperati da DisplayMetrics potrebbero non essere validi fino al primo sorteggio. stai verificando questo su onCreate o suDraw o quando? – SteelBytes

+0

Il vero motivo per cui il risultato era zero è perché zero è il valore predefinito in java per un int. 'dm.widthPixels' non è stato inizializzato quindi il suo valore è zero e zero diviso per due è anche zero ... dovresti aver provato qualcosa come' mView.getContext(). getResources(). getDisplayMetrics() ' – Armin

risposta

3

Il modo più semplice sarà implementare onSizeChanged. Probabilmente stai ottenendo un valore di 0 perché la vista non è ancora stata inizializzata. Ad esempio, non è possibile richiamare il codice precedente nel costruttore View.

+0

quindi cosa fa questo? significa per me, quando dinamicamente voglio aggiungere TableRows e dopo aver finito di aggiungere la tabella al LinearLayout principale e impostare questo a ContentView (utilizzando this.setContentView (ll), dove ll è il mio linearLayout? – poeschlorn

+0

onSizeChanged sarà chiamato il primo tempo in cui viene visualizzata la tua vista e ogni volta che cambia l'orientamento. Quando viene chiamato, memorizza le dimensioni dello schermo nei membri delle classi. Usa questi valori quando disegni (nel metodo OnDraw). – kgiannakakis

+0

grazie, ci provo questo :) – poeschlorn

17

È possibile ottenere metriche di schermo in questo modo:

Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = d.getWidth(); 
int height = d.getHeight(); 
+3

dovrebbe essere contrassegnata la risposta corretta – emaillenin

+1

Viene visualizzato un avviso @decrecato, senza ulteriori spiegazioni. ha usato la risposta di Guillaume Perrot invece – Moak

+0

@Moak, è stata ritirata dall'API di Android 13. Vedere i [documenti] (http://developer.android.com/riferimento/android/view/display.html # getWidth% 28% 29). –

4

Io uso il seguente:

int scrWidth = getWindowManager().getDefaultDisplay().getWidth(); 
int scrHeight = getWindowManager().getDefaultDisplay().getHeight(); 

No muss, nessuna confusione, a soli 2 variabili di classe

32

La risposta trashkalmar è corretta.

Tuttavia, i risultati saranno specifici per il contesto di attività. Se si desidera l'intera risoluzione dello schermo del dispositivo:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int screenWidth = displayMetrics.widthPixels; 
int screenHeight = displayMetrics.heightPixels; 

Si noti che i risultati dipendono anche dall'orientamento corrente del dispositivo.

+0

Perfetto! ... ... ... ... –

5

1. Uso semplice Questa attività interna consente di ottenere pixel di larghezza e altezza dello schermo.

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay() 
    .getMetrics(metrics); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 

2.This può essere utilizzato anche, ma richiede livello Api inline controllare

Display display = getWindowManager().getDefaultDisplay(); 

Point size = new Point(); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
    display.getSize(size); 
    int width2 = size.x; 
    int height2 = size.y; 

} else { 
    int width2 = display.getWidth(); 
    int height2 = display.getHeight(); 
} 

3.Usare Questo quando non si è in attività, ma avendo contesto

WindowManager wm = (WindowManager) context.getSystemService(
      Context.WINDOW_SERVICE); 
Display display1 = wm.getDefaultDisplay(); 
Point size1 = new Point(); 

int width1; 
int height1; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 

    display1.getSize(size1); 
    width1 = size1.x; 
    height1 = size1.y; 

} else { 
    width2 = display.getWidth(); 
    height2 = display.getHeight(); 
} 
Problemi correlati