Frage Erhalten Sie Bildschirmabmessungen in Pixeln


Ich habe einige benutzerdefinierte Elemente erstellt und möchte sie programmatisch in der oberen rechten Ecke platzieren (n Pixel von der oberen Kante und m Pixel von der rechten Kante). Daher muss ich die Bildschirmbreite und Bildschirmhöhe bekommen und dann die Position einstellen:

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

Wie bekomme ich screenWidth und screenHeight in der Hauptaktivität?


1672
2018-06-19 08:25


Ursprung


Antworten:


Wenn Sie die Anzeige Abmessungen in Pixel möchten, können Sie verwenden getSize:

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

Wenn du nicht in einer bist Activity Sie können den Standard erhalten Display über WINDOW_SERVICE:

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

Vor getSize wurde eingeführt (in API Level 13), könnten Sie die verwenden getWidth und getHeight Methoden, die jetzt veraltet sind:

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

Für den Anwendungsfall, den Sie beschreiben, scheint jedoch ein Rand / Padding im Layout angemessener zu sein.

Ein anderer Weg ist: DisplayMetrics

Eine Struktur, die allgemeine Informationen zu einer Anzeige beschreibt, z. B. ihre Größe, Dichte und Schriftartenskalierung. Um auf die DisplayMetrics-Mitglieder zuzugreifen, initialisieren Sie ein Objekt wie folgt:

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

Wir können benutzen widthPixels um Informationen zu erhalten für:

"Die absolute Breite der Anzeige in Pixeln."

Beispiel:

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

3327
2018-06-19 08:41



Ein Weg ist:

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

Es ist veraltet und Sie sollten stattdessen den folgenden Code versuchen. Die ersten beiden Codezeilen enthalten die DisplayMetrics-Objekte. Dieses Objekt enthält die Felder heightPixels, widthPixels.

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

int height = metrics.heightPixels;
int width = metrics.widthPixels;

350
2018-01-31 02:01



Es kann Ihre Frage vielleicht nicht beantworten, aber es könnte nützlich sein, wenn Sie eine Ansichtsdimension benötigen, aber Ihr Code wird ausgeführt, wenn sein Layout noch nicht angelegt wurde (zum Beispiel in onCreate() ) Sie können ein ViewTreeObserver.OnGlobalLayoutListener mit View.getViewTreeObserver().addOnGlobalLayoutListener() und setzen Sie den relevanten Code, der die Dimension der Ansicht benötigt. Der Callback des Hörers wird aufgerufen, wenn das Layout angelegt wurde.


111
2018-04-06 21:23



(2012 Antwort, möglicherweise veraltet) Wenn Sie vor Honeycomb unterstützen möchten, müssen Sie in Rückwärtskompatibilität vor API 13 setzen. Etwas wie:

int measuredWidth = 0;
int measuredHeight = 0;
WindowManager w = getWindowManager();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    Point size = new Point();
    w.getDefaultDisplay().getSize(size);
    measuredWidth = size.x;
    measuredHeight = size.y;
} else {
    Display d = w.getDefaultDisplay();
    measuredWidth = d.getWidth();
    measuredHeight = d.getHeight();
}

Natürlich werden die veralteten Methoden irgendwann aus den neuesten SDKs herausgenommen, aber während wir immer noch darauf vertrauen, dass die meisten unserer Benutzer Android 2.1, 2.2 und 2.3 haben, bleibt uns das übrig.


103
2017-07-24 03:14



Ich habe alle möglichen "Lösungen" erfolglos ausprobiert und mir ist aufgefallen, dass die App "Dalvik Explorer" von Elliott Hughes immer die richtige Dimension auf jeder Android-Gerät / Betriebssystem-Version zeigt. Ich schaute auf sein Open-Source-Projekt, das hier zu finden ist: https://code.google.com/p/enh/

Hier ist der relevante Code:

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
try {
    // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
try {
    // used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

BEARBEITEN: leicht verbesserte Version (vermeiden Sie das Auslösen von Ausnahmen bei nicht unterstützter Betriebssystemversion):

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

62
2018-03-29 08:15



Für den Zugriff auf die Höhe der Statusleiste für Android-Geräte bevorzugen wir einen programmatischen Weg, um es zu bekommen:

Beispielcode

int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) {
    result = getResources().getDimensionPixelSize(resId);
}

Die Variable result gibt die Höhe im Pixel an.

Für schnellen Zugriff

Enter image description here

Für weitere Informationen über Höhe von Title bar, Navigation bar und Content Viewschau bitte Bildschirmgrößen für Android-Geräte.


43
2017-08-27 13:12



Einfachster Weg:

 int screenHeight = getResources().getDisplayMetrics().heightPixels;
 int screenWidth = getResources().getDisplayMetrics().widthPixels; 

42
2017-11-26 10:47



Erstmal Blick bekommen (zB durch findViewById()) und dann können Sie verwenden getWidth () auf die Aussicht selbst.


28
2018-06-19 08:38



Ich habe zwei Funktionen, eine für das Senden des Kontextes und die andere für die Höhe und Breite in Pixel:

public static int getWidth(Context mContext){
    int width=0;
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    if(Build.VERSION.SDK_INT>12){
        Point size = new Point();
        display.getSize(size);
        width = size.x;
    }
    else{
        width = display.getWidth();  // Deprecated
    }
    return width;
}

und

public static int getHeight(Context mContext){
    int height=0;
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    if(Build.VERSION.SDK_INT>12){
        Point size = new Point();
        display.getSize(size);
        height = size.y;
    }
    else{
        height = display.getHeight();  // Deprecated
    }
    return height;
}

24
2017-10-17 14:44



Zur dynamischen Skalierung mit XML gibt es ein Attribut namens "android: layout_weight"

Das folgende Beispiel, modifiziert von synics Antwort auf Dieser Thread, zeigt eine Schaltfläche, die 75% des Bildschirms belegt (Gewicht = .25) und eine Textansicht, die die restlichen 25% des Bildschirms einnimmt (Gewicht = 0,75).

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight=".25"
        android:text="somebutton">

    <TextView android:layout_width="fill_parent"
        android:layout_height="Wrap_content"
        android:layout_weight=".75">
</LinearLayout>

17
2017-12-22 06:11