android - studio - Cómo establecer el tamaño de texto de textview de forma dinámica para diferentes pantallas
mostrar texto en android studio (7)
Creo que debes usar el método textView.setTextSize (tamaño del flotador) para establecer el tamaño del texto. textView.setText (arg) utilizado para establecer el texto en la Vista de texto.
Esta pregunta ya tiene una respuesta aquí:
Estoy creando una vista de texto y agregando dinámicamente al diseño. Estoy usando el método textView.setTextSize(18)
para establecer el tamaño del texto. Lo probé en una tableta Samsung y encontré que el tamaño de la fuente es demasiado pequeño para esta pantalla, luego cambié el tamaño de texto a 25 pero es demasiado grande para un emulador ( 480 * 800). Mi problema es establecer el tamaño del texto de forma dinámica para que se ajuste a todas las pantallas.
Debe usar las carpetas de recursos como
values-ldpi
values-mdpi
values-hdpi
Y escriba el tamaño del texto en el archivo ''dimensions.xml'' para cada rango.
Y en el código de Java puede establecer el tamaño del texto con
textView.setTextSize(getResources().getDimension(R.dimen.textsize));
Sample dimensions.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textsize">15sp</dimen>
</resources>
Después de mucho tiempo golpeó esto y finalmente se resolvió así
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));
crear una carpeta dimen
como esta res/values/dimensions.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textsize">8sp</dimen>
</resources>
EDITAR: Y mientras busco en ahora encontré que esta pregunta es duplicada de : This y This
Necesita usar otra función setTextSize(unit, size)
con unidad SP
como esta,
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
Por favor, lea más sobre TypedValue constantes de TypedValue .
En Style.xml predefinir el estilo:
<style name="largeText">
<item name="android:textAppearance">@android:style/TextAppearance.Large.Inverse</item>
<item name="android:textStyle">bold</item>
</style>
en codigo:
text.setTextAppearance(context, R.style.largeText);
Probablemente no sea necesario utilizar los ldpi
, mdpi
o hdpi
en este caso.
Cuando define una dimensión en un archivo de recursos, incluye la unidad de medida. Si usa unidades sp, éstas se escalan de acuerdo con la densidad de la pantalla, por lo que el texto a 15sp debería aparecer aproximadamente del mismo tamaño en pantallas de diferente densidad.
(La densidad real de la pantalla del dispositivo no coincidirá exactamente, ya que Android generaliza la densidad de la pantalla en grupos de 120, 160, 240, 320, 480 and 640 dpi
).
Al llamar a getResources().getDimension(R.dimen.textsize)
devolverá el tamaño en píxeles. Si usa sp, se escalará según la densidad de la pantalla,
Llamar a setText(float)
establece el tamaño en sp units
. Aquí es donde está el problema,
es decir , tiene las medidas de píxeles por un lado y la sp unit
por el otro para arreglar esto:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));
Tenga en cuenta que también puede usar
getResources().getDimensionPixelSize(R.dimen.textSize);
en lugar de getDimension()
y redondeará y convertirá a un valor no fraccionario.
float currentSize = textEdit.getTextSize(); // default size
float newSize = currentSize * 2.0F; // new size is twice bigger than default one
textEdit.setTextSize(newSize);