In dimension.xml habe ich:
<dimen name="text_medium">18sp</dimen>
Zur Laufzeit erhalte ich diesen Wert und lege die Textgröße einer Textansicht fest:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).
Auf einem 10-Zoll-Tablet (1280 x 800) ist alles in Ordnung. Auf einem Telefon (800 x 480) hat die Textansicht jedoch eine sehr große Schriftart. Auf dem Tablet beträgt die Größe 18; am Telefon ist es 27.
Wenn ich die Größe manuell einstelle durch:
textView.setTextSize(size)
Die Größe ist auf beiden Geräten normal.
android
textview
dimensions
Yura Shinkarev
quelle
quelle
TypedValue.COMPLEX_UNIT_SP
stattdessen verwenden?Resources.getDimension()
Methode gibt den Wert zurück, der bereits mit der entsprechenden Metrik multipliziert wurdeBeide Methoden getDimensionPixelSize () und getDimension () verwenden die Bildschirmdichte zur Berechnung der Pixel. Die Bildschirmdichte Ihres Telefons beträgt offensichtlich hdpi (240 dpi), daher wird eine Skala von 1,5 verwendet, um dp in sp umzuwandeln. Einfache Mathematik 18 * 1,5 = 27.
Es scheint, dass Ihre Tablettendichte mdpi (160 dpi) beträgt, sodass der Maßstab nur 1: 1 beträgt.
Wenn Sie jedoch die tatsächliche Größe beider Texte vergleichen, sollte sie gleich sein.
Am besten erstellen Sie einfach zwei dimension.xml-Dateien, eine im Werteordner für das Telefon und eine im Werte-sw600dp für Tablets (Sie können auch den Ordner values-sw720dp-land verwenden, um die Abmessungen für 10-Zoll-Tablets im Querformat zu speichern).
Weitere Informationen zu Dimensionen in Android finden Sie unter: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/
quelle
Sie können SDP (Scalable Desnsity Pixel) https://github.com/intuit/sdp anstelle von DP verwenden. Dies wird definitiv Ihr Leben retten
quelle