Necesito el actual TextSize
del TextView
en unidades sp
.Convertir píxeles a sp
Pero getTextSize()
devuelve el tamaño en pixels
. Entonces, ¿hay alguna manera de convert pixels to sp
?
Necesito el actual TextSize
del TextView
en unidades sp
.Convertir píxeles a sp
Pero getTextSize()
devuelve el tamaño en pixels
. Entonces, ¿hay alguna manera de convert pixels to sp
?
Ver la clase DisplayMetrics, tiene campos para densityDpi
y scaledDensity
.
Ejemplo:
float sp = px/getResources().getDisplayMetrics().scaledDensity;
Solo para aclarar: la clase 'DisplayMetrics' tiene _fields_' densityDpi' y 'scaledDensity', no los métodos. Y para escalar, uno querría usar el campo 'densidad' en lugar de' densityDpi'. –
Responda la pregunta. Decir el nombre de una clase que puede usarse para una respuesta no es una respuesta en sí misma. – Megakoresh
Utilice esta
public static float pixelsToSp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
Si desea probar si este método funciona derecha Usar este fragmento
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()));
Tanto el tamaño de fuente de TextView debe ser el mismo.
raro ver el campo público que se ajusta en tiempo de ejecución pero funciona. El Dpi estándar es 160, cualquiera que sea su dispositivo Dpi, digamos 240, tanto la densidad como la escala mostrarán 240/160 = 1.5 Así es como se convierte entre píxeles y sp: px = 1.5 * sp
Véase también [esta respuesta] (http://stackoverflow.com/a/42108115/3681880) para las conversiones 'DP -> PX',' PX -> DP', 'SP a PX' y' PX a SP'. – Suragch