2010-05-25 16 views
9

to jest naprawdę proste pytanie, na które nie znalazłem odpowiedzi:/ Jak szybko uzyskać dostęp do rozdzielczości ekranu (szerokość, wysokość) jako wartości całkowite?Android: Uzyskaj rozdzielczość ekranu/piksele jako liczby całkowite

Próbowałem ten jeden, ale zawsze pokazuje zero na moim emulatora:

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

W moim przypadku chcę dynamicznie utworzyć tabelę z tableRows, każdy zawierający dwie cols. Wszystkie te elementy wypełniają połowę szerokości ekranu.

Czy ktoś może mi podpowiedzieć?

+0

tylko przypuszczenie - wartości pobrane z DisplayMetrics mogą być nieważne do pierwszego losowania. sprawdzasz to na onCreate lub onDraw lub kiedy? – SteelBytes

+0

Prawdziwym powodem, dla którego wynik wynosił zero, jest zero, ponieważ wartość domyślna w java jest równa int. 'dm.widthPixels' nie został zainicjowany, więc jego wartość wynosi zero, a zero podzielone przez dwa jest również równe zero ... powinieneś wypróbować coś takiego jak' mView.getContext(). getResources(). getDisplayMetrics() ' – Armin

Odpowiedz

3

Najprostszym sposobem będzie wdrożenie onSizeChanged. Prawdopodobnie otrzymujesz wartość 0, ponieważ widok nie został jeszcze zainicjowany. Nie można na przykład wywołać powyższego kodu w konstruktorze widoku.

+0

więc co to oznacza dla mnie, gdy dynamicznie chcę dodać TableRows i po zakończeniu dodawania tabeli do głównego LinearLayout i ustawić ten do ContentView (przy użyciu this.setContentView (ll), gdzie ll jest mój lineLayout? – poeschlorn

+0

onSizeChanged będzie nazywany pierwszym czas, w którym twój widok jest narysowany i kiedy zmienia się orientacja Kiedy zostanie wywołana, zapamiętaj wymiary ekranu w swoich klasach Użyj tych wartości podczas rysowania (w metodzie OnDraw) – kgiannakakis

+0

dzięki, spróbuję to :) – poeschlorn

17

Można uzyskać dane na ekranie w ten sposób:

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

to powinno być oznaczone poprawną odpowiedzią – emaillenin

+1

Otrzymuję ostrzeżenie @deprecated, bez dalszych wyjaśnień. zamiast tego użył odpowiedzi Guillaume'a Perrota: – Moak

+0

@Moak, był przestarzały od interfejsu Android API 13. Zobacz [docs] (http://developer.android.com/reference/android/view/Display.html # getWidth% 28% 29). –

4

używam następujące:

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

nr muss, bez problemów, zaledwie 2 zmienne klasy

32

trashkalmar odpowiedź poprawny.

Wyniki będą jednak specyficzne dla kontekstu działania. Jeśli chcesz uzyskać rozdzielczość całego urządzenia:

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; 

Pamiętaj, że wyniki zależą również od aktualnej orientacji urządzenia.

+0

Idealnie! ... ... ... ... –

5

1. Użyj tej czynności wewnątrz, aby uzyskać piksele o szerokości i wysokości.

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

2.Niniejsze może być również używany, ale wymaga sprawdzenia poziomu Api wplatany

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 to, kiedy nie jesteś w działalności, ale o kontekst

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(); 
} 
Powiązane problemy