tamaño samsung los letra iconos como celular cambiar agrandar android android-fonts

samsung - ¿Cómo evitar que los efectos de cambio de tamaño de fuente del sistema a la aplicación de Android?



como agrandar la letra del celular huawei (4)

Hace poco terminé de desarrollar mi aplicación para Android. Utilicé sp (píxeles escalados) para todos los TextSize. El problema es que cuando ajusté el tamaño de fuente del sistema, los tamaños de fuente de mi aplicación están cambiando. Puedo usar dp (píxeles independientes del dispositivo) pero me llevará demasiado tiempo mantener mi aplicación.

Me referí al tamaño del texto de this .

¿Hay alguna manera de evitar que el tamaño de la fuente del sistema cambie los efectos a mi aplicación?


Así es cómo lo hacemos. En la clase de aplicación , anule onConfigurationChanged () de esta manera. Si desea un comportamiento diferente para diferentes actividades, anule onConfigurationChanged () en Activity.

No se olvide de agregar la etiqueta de manifiesto android: configChanges = "fontScale" ya que usted mismo está modificando este cambio de configuración.

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // In some cases modifying newConfig leads to unexpected behavior, // so it''s better to edit new instance. Configuration configuration = new Configuration(newConfig); SystemUtils.adjustFontScale(getApplicationContext(), configuration); }

En alguna clase de ayuda tenemos el método adjustFontScale () .

public static void adjustFontScale(Context context, Configuration configuration) { if (configuration.fontScale != 1) { configuration.fontScale = 1; DisplayMetrics metrics = context.getResources().getDisplayMetrics(); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(metrics); metrics.scaledDensity = configuration.fontScale * metrics.density; context.getResources().updateConfiguration(configuration, metrics); } }

¡ADVERTENCIA! ¡Eso ignorará totalmente la configuración de usuario de la Escala de fuentes de accesibilidad e impedirá la escala de las fuentes de la aplicación!


Hay otra manera de evitar el problema de diseño de la aplicación / problema de fuente de la configuración de cambio de tamaño de fuente. Puedes probar

// ignore the font scale here final Configuration newConfiguration = new Configuration( newBase.getResources().getConfiguration() ); newConfiguration.fontScale = 1.0f; applyOverrideConfiguration(newConfiguration);

donde newBase es de la función attachBaseContext. Debe anular esta devolución de llamada en su Actividad.

Pero, el efecto secundario es que si quieres usar animación (objectanimator / valueanimator), entonces causará un comportamiento extraño.


Recientemente me encontré con este problema también. Nuestra interfaz de usuario no se ajustó bien en teléfonos con dimensiones de pantalla limitadas y cambiar la interfaz de usuario completa en caso de que un usuario configurara sus Opciones de accesibilidad a "Enorme" parecía una tontería.

Encontré que esta question en es la más útil.

Lo que hice fue colocar el siguiente código a continuación en mi BaseActivity (una clase de actividad de la que se extienden todas mis actividades)

public void adjustFontScale(Configuration configuration) { if (configuration.fontScale > 1.30) { LogUtil.log(LogUtil.WARN, TAG, "fontScale=" + configuration.fontScale); //Custom Log class, you can use Log.w LogUtil.log(LogUtil.WARN, TAG, "font too big. scale down..."); //Custom Log class, you can use Log.w configuration.fontScale = (float) 1.30; 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); } }

Y lo llamó justo después de mi super.onCreate() como tal

adjustFontScale(getResources().getConfiguration());

Lo que hace este código es identificar si el usuario establece su escala de fuente en Configuración de accesibilidad en algo mayor que 1.30f (1.30f es "Grande" en la Nota 5, pero probablemente varía un poco de un dispositivo a otro). Si el usuario configura su fuente demasiado grande ("Extra Large", "Huge" ...), escalamos la aplicación solo a "Large".

Esto permite que su aplicación se adapte a las preferencias de un usuario (hasta cierto punto) sin distorsionar su interfaz de usuario. Esperemos que esto ayude a otros. ¡Buena suerte escalando!

Otros consejos

Si desea que ciertos diseños se amplíen con sus fuentes (por ejemplo, un RelativeLayout que use como fondo para sus fuentes), puede configurar su ancho / alto con sp en lugar del dp clásico. Cuando un usuario cambia su tamaño de fuente, el diseño cambiará de acuerdo con las fuentes en su aplicación. Buen truco pequeño.


Si necesita que su texto permanezca del mismo tamaño, tendrá que usar dp .

Para citar la documentation :

Un sp es la misma unidad base, pero se escala según el tamaño de texto preferido del usuario (es un píxel independiente de la escala), por lo que debe usar esta unidad de medida al definir el tamaño del texto (pero nunca para tamaños de diseño).

Énfasis mío.

Así que estás viendo el comportamiento esperado para usar sp como tus unidades para el tamaño del texto.

No entiendo lo que quiere decir sobre el uso de dp por demasiado tiempo para mantener su aplicación. Por lo que puedo decir, ¿será exactamente la misma cantidad de esfuerzo? (Quizás menos, aunque probablemente lo hará menos útil para usuarios con poca visión)