texto tamaño studio personalizar online mostrar letra fuente español cambiar android android-layout android-textview android-fonts

tamaño - personalizar textview android studio



El tamaño de la fuente de TextView en la aplicación de Android cambia al cambiar el tamaño de la fuente de la configuración nativa (8)

Deseo especificar mi propio tamaño de texto en mi aplicación, pero tengo un problema para hacer esto.

Cuando cambio el tamaño de la fuente en la configuración del dispositivo, también cambia el tamaño de fuente de la aplicación TextView .


En realidad, el tamaño de la fuente de configuración solo afecta a los tamaños en sp . Entonces, todo lo que tiene que hacer es definir textSize en dp en lugar de sp , luego la configuración no cambiará el tamaño del texto en su aplicación.

Aquí hay un enlace a la documentación: Dimensions

Sin embargo, tenga en cuenta que el comportamiento esperado es que las fuentes en todas las aplicaciones respetan las preferencias del usuario. Hay muchas razones por las cuales un usuario puede querer ajustar el tamaño de las fuentes y algunas de ellas incluso pueden ser médicas: usuarios con discapacidad visual. Usar dp lugar de sp para el texto puede llevar a discriminar de forma involuntaria contra algunos de los usuarios de su aplicación.


La forma simple de evitar que toda la aplicación se vea afectada por el tamaño de fuente del sistema es actualizar la configuración mediante una actividad base.

//in base activity add this code. public void adjustFontScale( Configuration configuration) { configuration.fontScale = (float) 1.0; DisplayMetrics metrics = getResources().getDisplayMetrics(); WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); metrics.scaledDensity = configuration.fontScale * metrics.density; getBaseContext().getResources().updateConfiguration(configuration, metrics); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); adjustFontScale( getResources().getConfiguration()); }



No es bueno tener que especificar DIP o SP nuevamente por código cuando ya está definido en un archivo dimen.xml.

Creo que la mejor opción es usar PX al usar un valor de dimen.xml:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));

De esta forma, puede cambiar de DP a SP si es necesario en el archivo dimen.xml sin tener que cambiar ningún código.


También tenga en cuenta que si textSize está configurado en código, la invocación de textView.setTextSize(X) interpreta el número (X) como SP. Use setTextSize(TypedValue.COMPLEX_UNIT_DIP, X) para establecer valores en dp .


Usar tamaño de fuente en DP en lugar de SP en textSize resuelve esto.


Use el tipo de dimension de recursos como si usa recursos de string ( Dimensions ).

En su archivo dimens.xml , declare sus variables de dimensión:

<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="textview_height">25dp</dimen> <dimen name="textview_width">150dp</dimen> <dimen name="ball_radius">30dp</dimen> <dimen name="font_size">16sp</dimen> </resources>

Entonces puedes usar estos valores como este:

<TextView android:layout_height="@dimen/textview_height" android:layout_width="@dimen/textview_width" android:textSize="@dimen/font_size"/>

Puede declarar diferentes archivos dimens.xml para diferentes tipos de pantallas. Hacer esto garantizará el aspecto deseado de su aplicación en diferentes dispositivos.

Cuando no especificas android:textSize el sistema usa los valores predeterminados.


esto puede ayudar. agregue el código en su aplicación personalizada o BaseActivity

/** * 重写 getResource 方法,防止系统字体影响 * * @return */ @Override public Resources getResources() { Resources resources = super.getResources(); if (resources != null && resources.getConfiguration().fontScale != 1) { Configuration configuration = resources.getConfiguration(); configuration.fontScale = 1; resources.updateConfiguration(configuration, resources.getDisplayMetrics()); } return resources; }

sin embargo, Resource # updateConfiguration se utiliza en el nivel de API 25, lo que significa que no se admitirá algún día en el futuro.