Ich möchte den Wert so laden, wie er ist. Ich habe zwei dimension.xml
Dateien, eine in /res/values/dimension.xml
und die andere in /res/values-sw360dp/dimension.xml
.
Aus dem Quellcode möchte ich so etwas machen
getResources().getDimension(R.dimen.tutorial_cross_marginTop);
Dies funktioniert, aber der Wert, den ich erhalte, wird mit dem Bildschirmdichtefaktor multipliziert (1,5 für hdpi, 2,0 für xhdpi usw.).
Ich habe es auch versucht
getResources().getString(R.dimen.tutorial_cross_marginTop);
Dies würde im Prinzip funktionieren, aber ich bekomme eine Zeichenfolge, die mit "dip" endet ...
android
android-resources
dpi
dimension
Héctor Júdez Sapena
quelle
quelle
getDimensionPixelSize(int id)
, die genau angibt, dass es in Pixel zurückgegeben wird.getDimension(int id)
Daher sollte es in dp (abhängigkeitsunabhängige Einheiten) zurückgegeben werden, das zur Verwendung bereit wäre, z. B. mit ViewsetPadding
Antworten:
In meiner dimension.xml habe ich
Im Code Wenn ich es tue
Dies gibt 72 zurück, was als Dokumentstatus mit der Dichte des aktuellen Telefons multipliziert wird (in meinem Fall 48dp x 1,5).
genau wie in den Dokumenten angegeben:
Wenn Sie also genau wie in XML einen exakten dp-Wert wünschen, teilen Sie ihn einfach mit der DisplayMetrics-Dichte
dp wird jetzt 48 sein
quelle
dp
dass dies den skalierten Pixelwert relativ zur Skalierung des Ressourcenobjekts ergibt, das zum Abrufen verwendet wird. Sobald Sie verschiedene Möglichkeiten gefunden haben, um Ressourcen zu erhalten, ist dies relevanter. Der Einfachheit halber können Sie sich das relativ zur Bildschirmskala vorstellen. Es gibt auchsp
oder Pixel relativ zur Systemtextgröße undpx
oder oder Pixel direkt. Jeder ist anders und hat einen anderen Zweck.quelle
Die
Resource
Klasse hat auch eine Methode getDimensionPixelSize (), die meiner Meinung nach Ihren Anforderungen entspricht.quelle
getDimensionPixelSize()
wenn Sie auf die Dokumente verweisen können, in denen eindeutig angegeben ist. RückgabeResource dimension value multiplied by the appropriate metric and truncated to integer pixels.
Für diejenigen, die nur einen gewissen
int
Wert in den Ressourcen sparen müssen , können Sie Folgendes tun.integers.xml
Code
quelle
Sie können getDimensionPixelOffset () anstelle von getDimension verwenden, sodass Sie nicht in int umwandeln mussten.
quelle
Sie können auch eine Ganzzahl in eine XML-Datei schreiben.
Haben Sie [diese] http://developer.android.com/guide/topics/resources/more-resources.html#Integer gesehen ? benutzen als .
quelle
Ich denke, es ist gut, den Wert gemäß Auflösung zu erhalten, aber wenn Sie dies nicht tun möchten, geben Sie dies in px an .......
Dichteunabhängiges Pixel (dp)
Eine virtuelle Pixeleinheit, die Sie beim Definieren des UI-Layouts verwenden sollten, um Layoutdimensionen oder -positionen dichteunabhängig auszudrücken. Das dichteunabhängige Pixel entspricht einem physikalischen Pixel auf einem 160-dpi-Bildschirm. Dies ist die Basisliniendichte, die vom System für einen Bildschirm mit "mittlerer" Dichte angenommen wird. Zur Laufzeit übernimmt das System bei Bedarf die Skalierung der dp-Einheiten transparent.
based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.
Sie sollten bei der Definition der Benutzeroberfläche Ihrer Anwendung immer dp-Einheiten verwenden, um eine ordnungsgemäße Anzeige Ihrer Benutzeroberfläche auf Bildschirmen mit unterschiedlichen Dichten sicherzustellen.Ich denke, es ist gut, den Wert gemäß der Auflösung zu ändern, aber wenn Sie dies nicht tun möchten, geben Sie dies in px an .......
Verweisen Sie auf diesen Link
wie dies
dp
Dichteunabhängige Pixel - Eine abstrakte Einheit, die auf der physischen Dichte des Bildschirms basiert. Diese Einheiten beziehen sich auf einen Bildschirm mit 160 dpi (Punkte pro Zoll), auf dem 1 dp ungefähr 1px entspricht.
When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down.
Das Verhältnis von dp zu Pixel ändert sich mit der Bildschirmdichte, jedoch nicht unbedingt in direktem Verhältnis. Die Verwendung von dp-Einheiten (anstelle von px-Einheiten) ist eine einfache Lösung, um die Größe der Ansichtsabmessungen in Ihrem Layout für unterschiedliche Bildschirmdichten richtig anzupassen. Mit anderen Worten, es bietet Konsistenz für die realen Größen Ihrer UI-Elemente auf verschiedenen Geräten.px
Pixel - Entspricht den tatsächlichen Pixeln auf dem Bildschirm. Diese Maßeinheit wird nicht empfohlen, da die tatsächliche Darstellung von Gerät zu Gerät unterschiedlich sein kann. Jedes Gerät hat möglicherweise eine andere Anzahl von Pixeln pro Zoll und möglicherweise mehr oder weniger Gesamtpixel auf dem Bildschirm.
quelle
Verwenden Sie eine Kotlin-Erweiterung
Sie können eine Erweiterung hinzufügen, um diesen Vorgang zu vereinfachen. Sie können einfach aufrufen
context.dp(R.dimen. tutorial_cross_marginTop)
, um den Float-Wert abzurufenWenn Sie ohne Kontext damit umgehen möchten, können Sie Folgendes verwenden
Resources.getSystem()
:Verwenden Sie beispielsweise auf einem xhdpi-Gerät,
24.dp
um 12.0 oder12.px
24 abzurufenquelle