560 Stimmen

die Bildschirmdichte in Android programmatisch abrufen?

Wie kann man die Bildschirmdichte in Android programmatisch ermitteln?

Ich meine: Wie findet man die Bildschirmauflösung des aktuellen Geräts?

567voto

joshperry Punkte 39356

Informationen über die Anzeige erhalten Sie über die DisplayMetrics Struktur:

DisplayMetrics metrics = getResources().getDisplayMetrics();

Android verwendet zwar keine direkte Pixelzuordnung, aber eine Handvoll quantisierter Density Independent Pixel-Werte, die dann auf die tatsächliche Bildschirmgröße skaliert werden. So wird die metrics.densityDpi wird eine der folgenden Eigenschaften sein DENSITY_xxx Konstanten ( 120 , 160 , 213 , 240 , 320 , 480 o 640 dpi).

Wenn Sie die aktuell lcd-Pixeldichte (vielleicht für eine OpenGL-Anwendung) können Sie sie aus dem metrics.xdpi y metrics.ydpi Eigenschaften für die horizontale bzw. vertikale Dichte.

Wenn Sie auf API-Stufen vor 4 abzielen, muss die metrics.density ist ein Fließkomma-Skalierungsfaktor ausgehend von der Referenzdichte (160dpi). Derselbe Wert, der jetzt von metrics.densityDpi kann berechnet werden

int densityDpi = (int)(metrics.density * 160f);

413voto

Blundell Punkte 72729

Das funktioniert auch:

 getResources().getDisplayMetrics().density;

Dies wird Ihnen helfen:

0,75 - ldpi

1,0 - mdpi

1,5 - hdpi

2.0 - xhdpi

3.0 - xxhdpi

4,0 - xxxhdpi

enter image description here

ref: Dichte

enter image description here

ref 2

149voto

Mitul Nakum Punkte 5364
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

switch(metrics.densityDpi) {
     case DisplayMetrics.DENSITY_LOW:
         break;

     case DisplayMetrics.DENSITY_MEDIUM:
         break;

     case DisplayMetrics.DENSITY_HIGH:
         break;
}

Dies funktioniert ab API-Stufe 4.

64voto

qwertzguy Punkte 12729

Blundell's Antwort als statische Hilfsmethode:

private static String getDensityName(Context context) {
    float density = context.getResources().getDisplayMetrics().density;
    if (density >= 4.0) {
        return "xxxhdpi";
    }
    if (density >= 3.0) {
        return "xxhdpi";
    }
    if (density >= 2.0) {
        return "xhdpi";
    }
    if (density >= 1.5) {
        return "hdpi";
    }
    if (density >= 1.0) {
        return "mdpi";
    }
    return "ldpi";
}

48voto

Ayaz Alifov Punkte 7474

Hier sind einige Dichtekonstanten, Quelle :

enter image description here

Zusätzlich zu den Standarddichten gibt es 5 Zwischendichten. Unter Berücksichtigung dieser Tatsache wird der folgende Code ein vollständiges Arbeitsbeispiel sein:

float density = getResources().getDisplayMetrics().density;

if (density == 0.75f)
{
    // LDPI
}
else if (density >= 1.0f && density < 1.5f)
{
    // MDPI
}
else if (density == 1.5f)
{
    // HDPI
}
else if (density > 1.5f && density <= 2.0f)
{
    // XHDPI
}
else if (density > 2.0f && density <= 3.0f)
{
    // XXHDPI
}
else
{
    // XXXHDPI 
}

Alternativ können Sie die Dichtekonstanten auch mit der Funktion densityDpi :

int densityDpi = getResources().getDisplayMetrics().densityDpi;

switch (densityDpi)
{
    case DisplayMetrics.DENSITY_LOW:
        // LDPI
        break;

    case DisplayMetrics.DENSITY_MEDIUM:
        // MDPI
        break;

    case DisplayMetrics.DENSITY_TV:
    case DisplayMetrics.DENSITY_HIGH:
        // HDPI
        break;

    case DisplayMetrics.DENSITY_XHIGH:
    case DisplayMetrics.DENSITY_280:
        // XHDPI
        break;

    case DisplayMetrics.DENSITY_XXHIGH:
    case DisplayMetrics.DENSITY_360:
    case DisplayMetrics.DENSITY_400:
    case DisplayMetrics.DENSITY_420:
        // XXHDPI
        break;

    case DisplayMetrics.DENSITY_XXXHIGH:
    case DisplayMetrics.DENSITY_560:
        // XXXHDPI
        break;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X