2012-03-28 11 views
0

Ich bin ein bisschen besorgt, was ich here gelesen habe, was bedeutet, dass es keine zuverlässige Formel zu berechnen px basiert auf dp und Rasterdichte (und umgekehrt):Warum "dp-to-pixel" Verhältnis mit der Bildschirmdichte ändert, aber nicht unbedingt in direktem Verhältnis

dp: dichteunabhängige Pixel - Eine abstrakte Einheit, die auf der physikalischen Dichte des Bildschirms basiert. Diese Einheiten beziehen sich auf einen Bildschirm mit 160 dpi (Punkte pro Zoll), auf dem 1 dpi ungefähr 1 Pixel entspricht. Wenn Sie auf einem Bildschirm mit höherer Dichte arbeiten, wird die Anzahl der Pixel, die zum Zeichnen von 1 dpi verwendet werden, um einen Faktor hochskaliert, der für die Bildschirmauflösung geeignet ist. In ähnlicher Weise wird die Anzahl der Pixel, die für 1 dp verwendet werden, auf einem Bildschirm mit geringerer Dichte herunterskaliert. Das Verhältnis von Pixel zu Pixel ändert sich mit der Bildschirmdichte, aber nicht unbedingt in direktem Verhältnis. Die Verwendung von dp-Einheiten (anstelle von px-Einheiten) ist eine einfache Lösung, um die Ansichtsdimensionen in Ihrem Layout für unterschiedliche Bildschirmdichten richtig zu skalieren. Mit anderen Worten, es bietet Konsistenz für die realen Größen Ihrer UI-Elemente auf verschiedenen Geräten.

Ich dachte, wir immer die folgende Formel verwenden könnten (erklärt here): px = dp * (dpi/160)

jedoch das Zeugnis in this question scheint einen Fall zu markieren, wo Größen in dp Angabe über nimmt keine Garantie für eine feste wahrgenommen Größe Geräte.

Was ist die wahre Bedeutung des Satzes in Fettdruck? Müssen wir mm verwenden, um sicher zu sein, die gleiche wahrgenommene Größe zu halten?

+0

Check this: http://stackoverflow.com/a/9529923/1012284 –

+0

@PadmaKumar Ich verstehe wann 'sp' und' dp' zu verwenden, aber das ist nicht die Frage;) –

Antwort

1

Ich dachte, wir immer die folgende Formel (hier erklärt) verwenden: px = dp * (dpi/160)

Diese Formel kann immer zwischen den Pixeln und dp konvertiert werden. Stellen Sie sicher, dass Sie DisplayMetrics.densityDpi als Wert für dpi in der Formel verwenden.

Die Aussage in dieser Frage scheint jedoch einen Fall hervorzuheben, bei dem die Angabe von Größen in dp keine feste wahrgenommene Größe über Geräte hinweg garantiert.

Ja, es ist wahr, dass eine bestimmte dp keine feste wahrgenommen Größe auf allen Geräten garantiert. Es garantiert jedoch eine ähnliche wahrgenommene Größe über Geräte. Der Grund dafür ist, dass sich dichteDpi (der Dichte-Bucket) bei einigen Geräten von dem physical dpi des Geräts unterscheidet. Weitere Informationen finden Sie unter my answer.

Das Verhältnis von dp-zu-Pixel wird mit der Rasterdichte ändern, aber nicht unbedingt in direktem Verhältnis

Hier denke ich, ihnen die tatsächliche physikalische Rasterdichte bedeuten, wenn sie „Rasterdichte“ sagen und nicht, zu welchem ​​Dichtebereich das Telefon gehört.

Zum Beispiel gehört ein Gerät mit einem physikalischen dpi von 270 zum "hohen" (240) Dichte-Bucket und hat ein dp-zu-Pixel-Verhältnis von 240/160 = 1.5

Ein weiteres Gerät mit einem physikalischen von 290 dpi ein dp-zu-Pixel-Verhältnis von 320/160 = 2

zum „xhigh“ (320) und Dichte bucket haben gehören Wenn Sie diese Geräte mit vergleichen die physikalische Bildschirmdichte hat sich um 7% (270 -> 290) erhöht, während das Verhältnis von Pixel zu Pixel um 33% (1,5 -> 2) zugenommen hat, also ist es kein direktes Verhältnis zwischen ihnen.

Müssen wir mm verwenden, um sicher zu sein, die gleiche wahrgenommene Größe zu halten?

Wenn es wichtig ist, dass die Größe zwischen Geräten so ähnlich wie möglich ist, müssen Sie mm oder Zoll verwenden. Dies hat jedoch einige Nachteile, wie ich in der Frage erwähnt habe, die Sie verlinkt haben.

Es ist auch wichtig, im Auge zu behalten, dass es einige Geräte, wo die mm und Zoll Einheiten aufgebrochen werden, um weitere Informationen zu diesem Thema finden Sie in die Frage Why Lint shows warning when using in (inch) or mm (millimeter) units as dimension?

Verwandte Themen