Pobierz wymiary ekranu w pikselach

Stworzyłem kilka niestandardowych elementów i chcę je programowo umieścić w prawym górnym rogu (n pikseli od górnej krawędzi i m pikseli od prawej krawędzi). Dlatego muszę uzyskać szerokość ekranu i wysokość ekranu, a następnie ustawić pozycję:

int px = screenWidth - m;
int py = screenHeight - n;

Jak mogę uzyskać screenWidth i screenHeight w głównej aktywności?

Rozwiązanie

Jeśli chcesz uzyskać wymiary wyświetlania w pikselach, możesz użyć getSize:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Jeśli nie jesteś w Activity możesz uzyskać domyślny Wyświetlacz poprzez WINDOW_SERVICE:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

Jeśli jesteś we fragmencie i chcesz to osiągnąć, po prostu użyj Activity.WindowManager (w Xamarin.Android) lub getActivity().getWindowManager() (w java).

Zanim getSize został wprowadzony (w API level 13), mogłeś użyć metod getWidth i getHeight, które teraz są przestarzałe:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

Dla przypadku użycia, który opisujesz, margines/padding w układzie wydaje się bardziej odpowiedni.

Innym sposobem jest: DisplayMetrics

Struktura opisująca ogólne informacje o wyświetlaczu, takie jak jego rozmiar, gęstość i skalowanie czcionki. Aby uzyskać dostęp do członków DisplayMetrics, zainicjalizuj obiekt w ten sposób:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Możemy użyć widthPixels, aby uzyskać informacje dla:

"Szerokość bezwzględna wyświetlacza w pikselach."

Przykład:

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
Komentarze (25)

Jednym ze sposobów jest:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

Jest on zdeprecjonowany i powinieneś zamiast niego wypróbować następujący kod. Pierwsze dwie linie kodu dają ci obiekt DisplayMetrics. Ten obiekt zawiera pola takie jak heightPixels, widthPixels.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int height = metrics.heightPixels;
int width = metrics.widthPixels;
Komentarze (10)

Najpierw zdobądź widok (np. przez findViewById()), a następnie możesz użyć getWidth() na samym widoku.

Komentarze (2)