Ich muss das Layout der Android-Widgets mit dip / dp (in Java-Dateien) codieren. Zur Laufzeit, wenn ich codiere
int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
;
Dies gibt die Bildschirmbreite in Pixel (px) zurück. Um dies in dp umzuwandeln, habe ich Folgendes codiert:
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
Dies scheint keine korrekte Antwort zu liefern . Ich habe den Emulator von WVGA800 mit einer Bildschirmauflösung von 480 x 800 erstellt. Als der Emulator ausgeführt wurde und der Code die Werte von Pixel und dp drucken ließ, betrug er in beiden Fällen 320. Dieser Emulator hat eine Auflösung von 240 dpi und einen Skalierungsfaktor von 0,75.
android
density-independent-pixel
Khushboo
quelle
quelle
Ich bin auf diese Frage von Google gestoßen und habe später eine einfache Lösung gefunden, die für API> = 13 gültig ist.
Für zukünftige Referenzen:
Siehe Referenz zur Konfigurationsklasse
Bearbeiten: Wie von Nick Baicoianu bemerkt, gibt dies die nutzbare Breite / Höhe des Bildschirms zurück (was bei den meisten Anwendungen interessant sein sollte). Wenn Sie die tatsächlichen Anzeigeabmessungen benötigen, halten Sie sich an die oberste Antwort.
quelle
Ihnen fehlt der Standarddichtewert von 160.
Mit anderen Worten, wenn Sie Ihr Layout mit einer Breite von 160 dip im Hochformat entwerfen, wird es auf allen ldpi / mdpi / hdpi-Geräten (außer Tablets, glaube ich) die Hälfte des Bildschirms ausmachen.
quelle
DisplayMetrics outMetrics = null; getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
innerhalb der Aktivität. Dann erhaltenoutMetrics.density
Sie den Skalierungsfaktor des aktuellen Geräts, wie in den Dokumenten angegebenWie wäre es stattdessen damit?
quelle
quelle
Antwort in Kotlin:
quelle
Vereinfacht für Kotlin:
quelle
Holen Sie sich Bildschirmbreite und -höhe in Bezug auf DP mit einer guten Dekoration:
Schritt 1: Schnittstelle erstellen
Schritt 2: Implementierungsklasse erstellen
Schritt 3: Breite und Höhe der Aktivität ermitteln:
quelle
Wenn Sie nur Ihre Bildschirmbreite wissen möchten, können Sie in Ihren Entwickleroptionen nach "kleinster Bildschirmbreite" suchen. Sie können es sogar bearbeiten.
quelle
Versuche dies:
quelle
Ihr Problem besteht darin, den Float in einen Int zu verwandeln und dabei an Präzision zu verlieren. Sie sollten auch mit dem Faktor multiplizieren und nicht dividieren.
Mach das:
quelle