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 .

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.

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().scaledDensityhttp://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);

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.