texto tamaño studio parrafo letra formato escribir editar cuadro como color cambiar alinear android android-textview text-size

tamaño - formato de texto en android studio



Cómo asignar el tamaño del texto en valor sp usando código java (10)

Si asigno un valor entero para cambiar un cierto tamaño de texto de una Vista de texto usando código Java, el valor se interpreta como píxel (px). Ahora, ¿alguien sabe cómo asignarlo en sp?


Basado en el código fuente de setTextSize :

public void setTextSize(int unit, float size) { Context c = getContext(); Resources r; if (c == null) r = Resources.getSystem(); else r = c.getResources(); setRawTextSize(TypedValue.applyDimension( unit, size, r.getDisplayMetrics())); }

Construyo esta función para calular cualquier demension a pixeles:

int getPixels(int unit, float size) { DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); return (int)TypedValue.applyDimension(unit, size, metrics); }

Donde unidad es algo así como TypedValue.COMPLEX_UNIT_SP .


Cuando la respuesta aceptada no funciona (por ejemplo, cuando se trata de Paint) puede usar:

float spTextSize = 12; float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity; textPaint.setTextSize(textSize);


En caso de que alguien esté buscando la forma de Kotlin, puede hacer

view.textSize = 12f


Este es el código para el formato de conversión de PX a SP . 100% funciona

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);


Gracias @John Leehey y @PeterH:

desiredSp = getResources().getDimension(R.dimen.desired_sp); density = getResources().getDisplayMetrics().density; textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);

El problema es si defines R.dimen.desired_sp a 25 en tu dimen.xml

  1. En dispositivos no HD: desiredSp sigue siendo 25, densidad = 1
  2. En dispositivo HD (como Nexus 7 2nd Generation): desiredSp se convierte en 50 ish, densidad = 2

Por defecto setTextSize, sin unidades, funciona en SP (escala de píxeles)

public void setTextSize (float size) Added in API level 1 Set the default text size to the given value, interpreted as "scaled pixel" units. This size is adjusted based on the current density and user font size preference.


Puede usar un objeto DisplayMetrics para ayudar a convertir entre píxeles y píxeles escalados con el atributo scaledDensity .

DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); pixelSize = (int)scaledPixelSize * dm.scaledDensity;


Un enfoque más limpio y más reutilizable es

defina el tamaño del texto en el archivo dimens.xml dentro de res/values/ directory:

</resources> <dimen name="text_medium">14sp</dimen> </resources>

y luego aplicarlo a TextView :

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));



semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_size_in_dp))