2010-05-25 16 views
9

das ist eine wirklich einfache Frage, auf die ich keine Antwort gefunden habe:/ Wie kann ich schnell auf die Bildschirmauflösung (Breite, Höhe) als ganzzahlige Werte zugreifen?Android: Holen Sie sich die Bildschirmauflösung/Pixel als ganzzahlige Werte

Ich habe diese eine versucht, aber es zeigt immer Null auf meinem Emulator:

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

In meinem Fall möchte ich eine Tabelle mit TableRows dynamisch erstellen, die jeweils zwei Spalten. Diese Spalte soll die Hälfte des Bildschirms in der Breite ausfüllen.

Kann mir jemand einen Tipp geben?

+0

nur eine Vermutung, die - Die von DisplayMetrics abgerufenen Werte sind möglicherweise nicht gültig bis zum ersten Zeichnen. überprüfen Sie dies auf onCreate oder onDraw oder wann? – SteelBytes

+0

Der wirkliche Grund, warum das Ergebnis Null war, ist, weil Null der Standardwert in Java für einen Int ist. 'dm.widthPixels' wurde nicht initialisiert, also ist der Wert Null und Null geteilt durch zwei ist auch Null ... Sie sollten etwas wie' mView.getContext(). getResources(). getDisplayMetrics() ' – Armin

Antwort

3

Der einfachste Weg wird die Implementierung onSizeChanged sein. Sie erhalten wahrscheinlich einen Wert von 0, da die Ansicht noch nicht initialisiert wurde. Sie können den obigen Code beispielsweise nicht im View-Konstruktor aufrufen.

+0

also was soll das getan haben bedeutet für mich, wenn ich dynamisch TableRows hinzufügen möchte und nach dem Hinzufügen die Tabelle zum HauptlinearLayout hinzufügen und dieses auf ContentView setzen (indem ich this.setContentView (ll) verwende, wobei ll mein linearLayout ist? – poeschlorn

+0

onSizeChanged wird der erste genannt) Mal, wenn die Ansicht gezeichnet wird und sich die Ausrichtung ändert Wenn sie aufgerufen wird, speichern Sie die Dimensionen des Bildschirms in den Mitgliedern Ihrer Klassen Verwenden Sie diese Werte beim Zeichnen (in der OnDraw-Methode) – kgiannakakis

+0

danke, ich werde es versuchen dies :) – poeschlorn

17

Sie können Bildschirm-Metriken auf diese Weise erhalten:

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

Dies sollte die richtige Antwort markiert werden – emaillenin

+1

Ich bekomme eine @deprecated Warnung, ohne weitere Erklärung. verwendet stattdessen die Antwort von Guillaume Perrot – Moak

+0

@Moak, war es seit Android API 13 veraltet. Siehe die [docs] (http://developer.android.com/Verweis/android/view/Display.html # getWidth% 28% 29). –

4

Ich benutze folgendes:

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

Kein Durcheinander, kein Stress, nur 2 Klassenvariablen

32

Die trashkalmar Antwort ist richtig.

Die Ergebnisse sind jedoch spezifisch für den Aktivitätskontext. Wenn Sie das ganze Gerät Bildschirmauflösung:

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; 

Beachten Sie, dass die Ergebnisse auch auf der aktuellen Geräteausrichtung abhängen.

+0

Perfekt! ... ... ... ... –

5

1.Einfach verwenden Diese Innenaktivität, um Pixel in Bildschirmbreite und -höhe zu erhalten.

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

2.Dieser auch verwendet aber erfordert Ebene Api werden kann

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.Use Diese inlined zu überprüfen, wenn Sie nicht in Tätigkeit sind aber Kontext

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