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

Этот вопрос почти дублирует приложение 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,

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

5 ответов

Решение

Я только что нашел в исходном коде 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);

Добавить параметр "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);

2023 ответ:

Вот как я получаю FontScale с помощью Kotlin:

      val fontScale = resources.configuration.fontScale

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

Другие вопросы по тегам