Rakeeb Rajbhandari
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.result_font));
El siguiente código funciona, pero el R.dimen.result_font
se toma como un valor mucho mayor de lo que realmente es. Es quizás alrededor de 18sp-22sp o 24sp según el tamaño de la pantalla … Pero el tamaño establecido aquí es al menos alrededor de 50sp. ¿Puede alguien recomendar algo?
glenn
Tienes que cambiarlo a TypedValue.COMPLEX_UNIT_PX
porque getDimension(id)
devuelve un valor dimen de los recursos y implícitamente convertido a píxeles.
Java:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.result_font));
Kotlin:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
resources.getDimension(R.dimen.result_font))
-
¿Por qué no usar getResources().getDimensionPixelSize() ?
– Nizzy
6 de agosto de 2014 a las 0:32
-
@Nizzy En realidad es lo mismo. La diferencia es el tipo de retorno. Dado que el segundo parámetro de
setTextSize()
requierefloat
valor,getDimension()
es una buena elección.– Glenn
6 de agosto de 2014 a las 1:14
-
¿Qué pasa con el relleno?
– sachithkn
26 de mayo de 2017 a las 8:39
-
@sachithkn Los 4 parámetros de
setPadding()
(inicio, superior, final, inferior) también requiere valores como píxeles.getDimension()
devuelto como valor de píxel. Por ejemplo, tengo un recurso 4dp con nombresmall_margin
cuando llamogetDimension(R.dimen.small_margin)
devolverá el producto de 4dp y la densidad del dispositivo (4dp * densidad). Digamos que el dispositivo es Nexus 5, su densidad es xxhdpi, el factor de escala de xxhdpi es 3, por lo que el método devolverá 4dp * 3.0.– Glenn
26 de mayo de 2017 a las 11:36
Requisito
Supongamos que queremos establecer el tamaño de vista de texto mediante programación desde un archivo de recursos.
Archivo de recursos de dimensión (res/valores/dimensiones.xml)
<resources>
<dimen name="result_font">16sp</dimen>
</resources>
Solución
primero consigue dimensión valor del archivo de recursos en una variable “textSizeInSp”.
int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
Siguiente conversión dieciséis sp valor en píxeles iguales.
para eso crea un método.
public static float convertSpToPixels(float sp, Context context) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}
Establecemos TextSize,
textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));
Todos juntos,
int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));