Wie bekomme ich die Bildschirmdichte programmgesteuert in Android?
Ich meine: Wie finde ich die Bildschirm-dpi des aktuellen Geräts?
android
dpi
screen-density
Praveen
quelle
quelle
getDisplayMetrics().xdpi
, die die tatsächliche dpi des Geräts zurückgeben sollen. Bitte beachten Sie, dass dieser Wert von den Herstellern auf allen Geräten nicht konsistent eingestellt wird , sodass Sie sie einfach nicht verwenden können . Traurig aber wahr: Die Informationen über echte dpi sind nicht verfügbar . Quelle: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpi
undgetResources().getDisplayMetrics().ydpi
gibt Ihnen tatsächliche horizontale und vertikale Dichten , die in den meisten Fällen unterschiedlich sind.Antworten:
Informationen zur Anzeige erhalten Sie in der DisplayMetrics- Struktur:
Obwohl Android keine direkte Pixelzuordnung verwendet, verwendet es eine Handvoll quantisierter dichteunabhängiger Pixelwerte und skaliert dann auf die tatsächliche Bildschirmgröße. So ist die
metrics.densityDpi
Eigenschaft eines der seineDENSITY_xxx
Konstanten (120
,160
,213
,240
,320
,480
oder640
dpi).Wenn Sie die tatsächliche LCD-Pixeldichte benötigen (möglicherweise für eine OpenGL-App), können Sie diese über die Eigenschaften
metrics.xdpi
undmetrics.ydpi
für die horizontale bzw. vertikale Dichte abrufen.Wenn Sie auf API-Ebenen vor 4 abzielen. Die
metrics.density
Eigenschaft ist ein Gleitkomma-Skalierungsfaktor aus der Referenzdichte (160 dpi). Der gleiche Wert, der jetzt von bereitgestellt wird,metrics.densityDpi
kann berechnet werdenquelle
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
Diese wurde offiziell in API 17 hinzugefügt, aber ich war überrascht, dass sie auch auf einem 4.0-Gerät, das ich ausprobiert habe, ordnungsgemäß funktioniert hat.Dies funktioniert auch:
Dies wird Ihnen geben:
0,75 - ldpi
1,0 - mdpi
1,5 - hdpi
2,0 - xhdpi
3,0 - xxhdpi
4.0 - xxxhdpi
ref: Dichte
Ref 2
quelle
WindowManager
(z. B. innerhalb eines Loaders). Multiplizieren Sie es einfach mit 160tvdpi
. Weitere Informationen findentvdpi
Sie hierDies funktioniert auf API-Ebene 4 und höher.
quelle
Blundells Antwort als statische Hilfsmethode:
quelle
Versuche dies:
quelle
View
viel einfacher verwenden (wo ich es brauche!)So erhalten Sie dpi:
quelle
Hier sind die Dichtekonstanten, Quelle :
Zusätzlich zu den Standarddichten gibt es 5 Zwischendichten. Unter Berücksichtigung dieser Tatsache ist der folgende Code ein vollständiges Arbeitsbeispiel:
Alternativ können Sie Dichtekonstanten finden mit
densityDpi
:quelle
Die folgende Antwort ist eine kleine Verbesserung, die auf der Antwort von qwertzguy basiert.
quelle
Wenn Sie die tatsächliche Anzeige-dpi haben möchten, liegt die Antwort tatsächlich irgendwo dazwischen, wenn Sie nach Anzeigemetriken fragen:
DichteDpi * 160 gibt Ihnen die Werte / Vorschläge, welche Dichte Sie verwenden sollten
wie in früheren Beiträgen angegeben
Sie erhalten jedoch
dm.xdpi
nicht immer die ECHTE dpi der angegebenen Anzeige: Beispiel:Vielleicht sollte die tatsächliche Auflösung des Displays Density * xdpi sein. Ich bin mir jedoch nicht sicher, ob dies der richtige Weg ist.
quelle
Dies sollte bei Ihrer Aktivität helfen ...
AUSGABE :
quelle
quelle
Wenn Sie die Dichte von einem Dienst abrufen möchten, funktioniert dies folgendermaßen:
quelle
Sie sollten dies versuchen. Gerade eine Methode hinzugefügt, die den Toast findet und anzeigt. Das, in welche Kategorie das Gerät fällt.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
quelle
Das sollte funktionieren.
quelle
Noch eine Antwort:
quelle
Eine andere Möglichkeit, die vom Gerät geladene Dichte zu ermitteln:
Erstellen Sie
values
Ordner für jede DichteFügen Sie eine Zeichenfolgenressource in ihre jeweiligen hinzu
strings.xml
:Dann holen Sie sich einfach die String-Ressource und Sie haben Ihre Dichte:
Wenn die Dichte größer als ist
XXXHDPI
, wird standardmäßigXXXHDPI
oder niedriger alsHDPI
standardmäßigMDPI
Ich habe weggelassen
LDPI
, weil es für meinen Anwendungsfall nicht notwendig ist.quelle
Versuche dies...
In Kotlin
Sie können anrufen
println("density: ${determineScreenDensityCode()}")
und die Ausgabe wird seinSystem.out: density: xxxhdpi
quelle
Ich verwende folgenden Code, um von Modulen aus auf DPI zuzugreifen (kein Zugriff auf ein Kontextobjekt erforderlich):
quelle
In Android können Sie die Bildschirmdichte wie folgt abrufen:
Und in Kotlin so:
Überprüfen Sie regelmäßig , ob neue Dichten hinzugefügt werden .
quelle