Cómo establecer el tamaño de texto de textview de forma dinámica para diferentes pantallas

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

   15sp  

EDITAR: Y mientras busco en StackOverflow ahora encontré que esta pregunta es duplicada de : esto y esto

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 las constantes de TypedValue .

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.

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

   8sp  

En Style.xml predefinir el estilo:

  

en codigo:

 text.setTextAppearance(context, R.style.largeText); 

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.

 float currentSize = textEdit.getTextSize(); // default size float newSize = currentSize * 2.0F; // new size is twice bigger than default one textEdit.setTextSize(newSize);