Leer tamaño de fuente desde Configuración
Esta pregunta es un casi dublicate de Android App: cómo leer el tamaño de fuente en Configuración? He leído la respuesta de CommonsWare que apunta a usar Settings.System.FONT_SCALE
. Así que escribí estas líneas:
float scale = -66.6f; try { scale = android.provider.Settings.System.getFloat(getContentResolver(), android.provider.Settings.System.FONT_SCALE); } catch(SettingNotFoundException e) { Log.e(getClass().getSimpleName(), "Error: ", e); } Toast.makeText(this, "scale=" + scale, Toast.LENGTH_LONG).show();
Mi problema es que siempre obtengo el SettingNotFoundException
Estoy usando un dispositivo Android 4.2.2. Por cierto, ese código está en una devolución de llamada onCreate
de una Activity
.
- Obtener el número de serie del hardware del dispositivo Android
- Problema al configurar el brillo en algún dispositivo Android
- Android: lanzar el diálogo de información de la aplicación vía adb shell am
- ¿Restablecer SharedPreferences?
- Settings.System.VOLUME_SETTINGS eliminado en Android API 23?
También googled para ese problema y encontré alrededor de 3 sitios que utiliza el mismo código. ¿Se requiere algún permiso especial? También he intentado el permiso android.permission.WRITE_SETTINGS
sin éxito.
- Agregar o quitar las entradas de idioma en el menú "Configuración" -> "Seleccionar configuración regional" en el teléfono Android
- ¿De dónde puedo importar la configuración de la versión anterior de Android Studio?
- Android - ¿Cómo cambiar los textos en la actividad de preferencias dinámicamente?
- ¿Cómo puedo establecer el ámbito predeterminado en IntelliJ 12 para encontrar usos?
- No se puede aplicar el brillo de la pantalla del sistema mediante programación en Android
- En Android (utilizando Java), ¿cómo puedo configurar el volumen del timbre (a un número especificado)?
- Actualizar actividad si se cambia la preferencia
Acabo de encontrar en el código fuente de Settings.System
esta función:
/** @hide */ public static void getConfigurationForUser(ContentResolver cr, Configuration outConfig, int userHandle) { outConfig.fontScale = Settings.System.getFloatForUser( cr, FONT_SCALE, outConfig.fontScale, userHandle); if (outConfig.fontScale < 0) { outConfig.fontScale = 1; } }
Sin embargo, hay FONT_SCALE
en uso así que he comprobado que la clase de Configuration
donde la documentación apunta a getResources().getConfiguration()
. Así que cound arreglar mi código mediante:
float scale = getResources().getConfiguration().fontScale;
Puede establecer la fuente del sistema según la escala de la fuente.
Ejemplo: Para la escala de fuente enorme es 2,0, entonces puede establecer como sigue.
Configuration config = new Configuration(); config.fontScale = 2.0f; getResources().getConfiguration().setTo(config);
Probablemente podría usar getResources().getDisplayMetrics().scaledDensity
– http://developer.android.com/reference/android/util/DisplayMetrics.html#scaledDensity
Agregue el parámetro "float def" al final del float estático público getFloat (ContentResolver cr, String name, float def)
Ejemplo:
Scale = android.provider.Settings.System.getFloat (getActivity (). GetContentResolver (), android.provider.Settings.System.FONT_SCALE, 1f);