java - studio - textview android
Cómo configurar la unidad para Paint.setTextSize() (5)
¿Es posible cambiar la unidad para Paint.setTextSize()
? Por lo que sé, es un píxel pero me gusta establecer el tamaño del texto en DIP para el soporte de múltiples pantallas.
Convertirlo así
// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;
// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);
// Use mGestureThreshold as a distance in pixels
desde aquí http://developer.android.com/guide/practices/screens_support.html#dips-pels
La respuesta aceptada es para gestos, no para configurar el tamaño del texto. La respuesta más votada (en el momento de escribir esto) está cerca, pero la documentación recomienda usar sp
lugar de dp
porque además de ser escalado para densidades de pantalla (como los valores de dp
), sp
también se escala según los tamaños de fuente preferidos por el usuario .
De un int
en código
int spSize = 17;
float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity;
mTextPaint.setTextSize(scaledSizeInPixels);
O alternativamente
int spSize = 17;
float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
spSize, getResources().getDisplayMetrics());
mTextPaint.setTextSize(scaledSizeInPixels);
De recursos
O si tienes el valor sp
o dp
en recursos:
<resources>
<dimen name="fontSize">17sp</dimen>
</resources>
con
float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize);
mTextPaint.setTextSize(scaledSizeInPixels);
Otros enlaces
Sé que este tema es antiguo y ya está respondido, pero también me gustaría sugerir este fragmento de código:
int MY_DIP_VALUE = 5; //5dp
int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
MY_DIP_VALUE, getResources().getDisplayMetrics());
Si su objeto de pintura se está utilizando para dibujar texto en un lienzo, puede dejar que el lienzo maneje la escala por usted.
Al llamar a Canvas.drawText()
el tamaño del texto se determina primero por el objeto Paint
pasado, que se puede establecer mediante Paint.setTextSize()
. El tamaño del texto se escala automáticamente mediante Canvas
función de la densidad del canvas, que se puede encontrar utilizando Canvas.getDensity()
.
Cuando establezca el tamaño del texto en un objeto de pintura que se dibujará en Canvas, trabaje con un valor unitario de dp
o sp
y deje que Canvas se encargue de la escala por usted.
Y aquí hay un método aún más corto para convertir dp-s a px-els teniendo en cuenta las métricas de visualización