Прочитать размер шрифта из настроек

Этот вопрос почти дублирует Android-приложение: как читать размер шрифта в настройках? Я прочитал ответ CommonsWare, который указывает на использование Settings.System.FONT_SCALE . Поэтому я написал несколько строк:

 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(); 

Моя проблема в том, что я всегда получаю SettingNotFoundException я использую устройство Android 4.2.2. Кстати, этот код находится в onCreate Activity .

Я также googled для этой проблемы и нашел около 3 сайтов, которые используют тот же код. Требуется ли специальное разрешение? Я пробовал также разрешение android.permission.WRITE_SETTINGS без успеха.

Solutions Collecting From Web of "Прочитать размер шрифта из настроек"

Я только что нашел в исходном коде Settings.System эту функцию:

 /** @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; } } 

Тем не менее, используется FONT_SCALE поэтому я проверил этот класс Configuration где документация указывает на getResources().getConfiguration() . Таким образом, я исправляю свой код, используя:

 float scale = getResources().getConfiguration().fontScale; 

Вы можете установить системный шрифт в соответствии со шкалой шрифтов.

Пример. Для огромного размера шрифта – 2.0, вы можете установить следующее.

 Configuration config = new Configuration(); config.fontScale = 2.0f; getResources().getConfiguration().setTo(config); 

Вероятно, вы можете использовать getResources().getDisplayMetrics().scaledDensityhttp://developer.android.com/reference/android/util/DisplayMetrics.html#scaledDensity

Добавьте параметр «float def» в конец открытого статического float getFloat (ContentResolver cr, String name, float def)

Пример:

Scale = android.provider.Settings.System.getFloat (getActivity (). GetContentResolver (), android.provider.Settings.System.FONT_SCALE, 1f);