Skip to content

Abrufen der Bildschirmbreite auf API-Ebene 30 (Android 11): getDefaultDisplay() und getMetrics() sind jetzt veraltet. Was sollten wir stattdessen verwenden?

Lösung:

Um die Bildschirmbreite abzüglich aller Systembalken zu berechnen, sollte dies funktionieren:

public static int getScreenWidth(@NonNull Activity activity) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        WindowMetrics windowMetrics = activity.getWindowManager().getCurrentWindowMetrics();
        Insets insets = windowMetrics.getWindowInsets()
                .getInsetsIgnoringVisibility(WindowInsets.Type.systemBars());
        return windowMetrics.getBounds().width() - insets.left - insets.right;
    } else {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.widthPixels;
    }
}

Beachten Sie, dass dies nicht Exakt Das gleiche: Das Testen mit der Höhe führt zu anderen Ergebnissen, und ich war nicht in der Lage, die Funktionalität der alten API mit der neuen API zu replizieren (teilweise weil das Verhalten der alten API etwas schwierig zu begründen ist und nicht immer das ist, was Sie tun). wollen, daher seine Abwertung). In der Praxis sollte es aber für viele Dinge als generische Bildschirmbreite ausreichen.

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.