Convertir píxeles a sp

Necesito el TextSize de TextSize actual de TextView en unidades sp .

Pero getTextSize() devuelve el tamaño en pixels . Entonces, ¿hay alguna forma de convert pixels to sp ?

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

Ejemplo de uso:

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

Utilizar esta

 public static float pixelsToSp(Context context, float px) { float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; return px/scaledDensity; } 

Si quiere probar si este método funciona correctamente, use este fragmento

XML

   

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())); 

El tamaño de fuente de ambos TextView debe ser el mismo.

Es extraño ver un campo público que se ajusta en tiempo de ejecución pero funciona. El Dpi estándar es 160, así que sea cual sea el dispositivo Dpi, digamos 240, tanto la densidad como la escala de densidad mostrarán 240/160 = 1.5 Así es como se convierte entre píxeles y sp: px = 1.5 * sp