Wie kann man die Bildschirmdichte in Android programmatisch ermitteln?
Ich meine: Wie findet man die Bildschirmauflösung des aktuellen Geräts?
Wie kann man die Bildschirmdichte in Android programmatisch ermitteln?
Ich meine: Wie findet man die Bildschirmauflösung des aktuellen Geräts?
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);
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";
}
Hier sind einige Dichtekonstanten, Quelle :
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 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.