Wenn Sie die Anzeigemaße in Pixeln wünschen, können Sie getSize
:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
Wenn Sie sich nicht in einer Activity
können Sie den Standard Display
über WINDOW_SERVICE
:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Wenn Sie sich in einem Fragment befinden und dies erreichen möchten, verwenden Sie einfach Activity.WindowManager (in Xamarin.Android) oder getActivity().getWindowManager() (in Java).
Vor getSize
eingeführt wurde (in API-Stufe 13), konnten Sie die getWidth
y getHeight
Methoden, die jetzt veraltet sind:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
Für den von Ihnen beschriebenen Anwendungsfall scheint jedoch ein Rand/Padding im Layout angemessener zu sein.
Eine andere Möglichkeit ist: DisplayMetrics
Eine Struktur, die allgemeine Informationen über eine Anzeige beschreibt, z. B. Größe, Dichte und Skalierung der Schrift. Um auf die DisplayMetrics-Mitglieder zuzugreifen, initialisieren Sie ein Objekt wie folgt:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Wir können verwenden widthPixels
um Informationen zu erhalten:
"Die absolute Breite der Anzeige in Pixeln".
Ejemplo:
Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
Aktualisierung der API-Stufe 30
final WindowMetrics metrics = windowManager.getCurrentWindowMetrics();
// Gets all excluding insets
final WindowInsets windowInsets = metrics.getWindowInsets();
Insets insets = windowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()
| WindowInsets.Type.displayCutout());
int insetsWidth = insets.right + insets.left;
int insetsHeight = insets.top + insets.bottom;
// Legacy size that Display#getSize reports
final Rect bounds = metrics.getBounds();
final Size legacySize = new Size(bounds.width() - insetsWidth,
bounds.height() - insetsHeight);
0 Stimmen
Verwenden Sie dp statt px, da dies Ihr Layout bei anderen Geräten verzerren würde.
0 Stimmen
Vergessen Sie nicht, mit getResources().getDisplayMetrics().density zu multiplizieren, um die Skalierung der Anzeige zu berücksichtigen.
0 Stimmen
Dies beweist, dass die am meisten hochgestufte Antwort nicht immer die beste ist (& viele Leute wiederholen Antworten, um sie zu wiederholen). Anstelle von getSize und der veralteten getWidth/getHeight-Kombination (Fehler ignorieren), versuchen Sie Balaji.K's
getMetrics
. Der Kommentar von Nik in seiner Antwort erklärt sogargetDisplayMetrics
um die Größe der System-/Statusleiste zu berücksichtigen. Sie können auch verwenden Dichte wie jmaculate und LoungeKatt erklärt haben, um die EXAKT Wert:DisplayMetrics dm = getResources().getDisplayMetrics(); float fwidth = dm.density * dm.widthPixels;
Getestet in Android v2.2 (API 8) und v4.0 mit guten Ergebnissen und keine Fehler/Warnungen .0 Stimmen
DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels;
0 Stimmen
Eine weitere Möglichkeit, die DisplayMetrics zu erhalten:
Resources.getSystem().getDisplayMetrics()
. Sie brauchen keineContext
um sie zu bekommen.