Ich brauche den Strom TextSize
des TextView
in sp
Einheiten.
Aber getTextSize()
gibt die Größe in zurück pixels
. Gibt es also einen Weg convert pixels to sp
?
Nital
Ich brauche den Strom TextSize
des TextView
in sp
Einheiten.
Aber getTextSize()
gibt die Größe in zurück pixels
. Gibt es also einen Weg convert pixels to sp
?
Sealskej
Benutze das
public static float pixelsToSp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
Wenn Sie testen möchten, ob diese Methode richtig funktioniert, verwenden Sie dieses Snippet
XML
<TextView
android:id="@+id/txtHelloWorld"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
<TextView
android:id="@+id/txtHelloWorld2"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Java
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
TextView helloWorldTextView = (TextView) rootView.findViewById(R.id.txtHelloWorld);
TextView helloWorldTextView2 = (TextView) rootView.findViewById(R.id.txtHelloWorld2);
helloWorldTextView2.setTextSize(pixelsToSp(getActivity(), helloWorldTextView.getTextSize()));
Die Schriftgröße beider TextViews sollte gleich sein.
Gabriel Negut
Siehe die AnzeigeMetriken Klasse, es hat Felder für densityDpi
und scaledDensity
.
Beispielnutzung:
float sp = px / getResources().getDisplayMetrics().scaledDensity;
Nur zur Verdeutlichung: die DisplayMetrics
Klasse hat Felder densityDpi
und scaledDensity
, nicht Methoden. Und zum Skalieren würde man das nutzen wollen density
Feld statt densityDpi
.
–Ted Hopp
12. April 16 um 16:58 Uhr
Bitte beantworten Sie die gestellte Frage. Den Namen einer Klasse zu sagen, die für eine Antwort verwendet werden kann, ist selbst keine Antwort.
– Megakoresch
16. Dezember 16 um 12:50 Uhr
Dieser hier hat mir geholfen 👍
– mustafiz012
18. März 19 um 08:28 Uhr
Es ist seltsam, ein öffentliches Feld zu sehen, das zur Laufzeit angepasst wird, aber es funktioniert. Standard Dpi ist 160, also was auch immer Ihr Gerät Dpi ist, sagen wir 240, sowohl density als auch scaledDensity zeigen 240/160=1.5. So konvertieren Sie zwischen Pixel und sp: px=1.5*sp
.
Siehe auch diese Antwort für
DP -> PX
,PX -> DP
,SP to PX
, undPX to SP
Konvertierungen.– Suragch
8. Februar 17 um 8:37 Uhr