2017-03-08 4 views
1

Es gibt eine sehr nette Art und Weise dp die Umwandlung ohne Kontext px, und es geht so:dp Konvertieren ohne Kontext px

public static int dpToPx(int dp) { 
    float density = Resources.getSystem().getDisplayMetrics().density; 
    return Math.round((float) dp * density); 
} 

In jedem Beispiel Google auf Google GitHub page sie den folgenden Ansatz verwenden:

public static int convertDpToPixel(Context ctx, int dp) { 
    float density = ctx.getResources().getDisplayMetrics().density; 
    return Math.round((float) dp * density); 
} 

Also ist etwas falsch mit dem ersten Ansatz? Für mich funktioniert es in allen meinen Apps gut, aber ich möchte wissen, gibt es einen Fall, wo es scheitern könnte?

Antwort

2

Gibt es einen Fehlerfall?

Ja, gibt es!

Android unterstützt verschiedene Bildschirme, z. B. können Sie die App mit Chromecast oder auf andere Weise mit einem anderen Bildschirm verbinden. In diesem Fall werden die Werte nicht korrekt auf diesen anderen Bildschirm konvertiert.

Vom documentation für Resources.getSystem():

Return ein globales Objekt gemeinsam genutzte Ressourcen, den Zugriff auf nur Systemressourcen (keine Anwendungsressourcen) zur Verfügung stellt und ist nicht für den aktuellen Bildschirm konfiguriert (keine Dimension verwenden Einheiten, ändert sich nicht basierend auf Orientierung, etc).

+0

Danke. In meinem Fall hat App keine "Cast" -Option, aber es kann wahrscheinlich auf seltsamen Geräten [wie diesem] (https://www.asus.com/us/Phone/ASUS_PadFone_X_US/) fehlschlagen. –