Ruft die Dimension aus XML ab und legt die Textgröße zur Laufzeit fest

101

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.

Yura Shinkarev
quelle

Antworten:

297
<dimen name="text_medium">18sp</dimen>

Stellen Sie die Größe im Code ein:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));
Kostek Polen
quelle
7
Ich weiß nichts über das OP, aber das war die Antwort, nach der ich gesucht habe. Ich habe COMPLEX_UNIT_DP verwendet und dachte, ich müsste den Eingabetyp und nicht den Ausgabetyp angeben.
HenryAdamsJr
Wenn ich meine Schriftgröße erhalte (definiert in einem sp), bekomme ich 60. Wenn ich sie mit OMPLEX_UNIT_PX zurücksetze und wieder abrufe, bekomme ich 70. Hier scheint nicht alles klar zu sein
Gleichmut
2
Warum kann ich für die Textgröße nicht TypedValue.COMPLEX_UNIT_SPstattdessen verwenden?
Dphans
3
@dphans Die Resources.getDimension()Methode gibt den Wert zurück, der bereits mit der entsprechenden Metrik multipliziert wurde
pkuszewski
2
@pkuszewski Wow, das ist so verwirrend.
Big_Chair
4

Beide 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/

Android4Beginner
quelle