2011-06-07 14 views
44

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?

+0

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

Respuesta

25

Ver la clase DisplayMetrics, tiene campos para densityDpi y scaledDensity.

uso

Ejemplo:

float sp = px/getResources().getDisplayMetrics().scaledDensity; 
+1

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'. –

+0

Responda la pregunta. Decir el nombre de una clase que puede usarse para una respuesta no es una respuesta en sí misma. – Megakoresh

131

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.

5

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

Cuestiones relacionadas