Прочитать размер шрифта в настройках
Этот вопрос является почти dublicate 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
без успеха.
Ответы
Ответ 1
Я только что нашел в исходном коде 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
Вы можете установить системный шрифт в соответствии со шкалой шрифтов.
Пример: для огромного размера шрифта - 2.0, вы можете установить следующее.
Configuration config = new Configuration();
config.fontScale = 2.0f;
getResources().getConfiguration().setTo(config);
Ответ 3
Добавьте параметр "float def" в конец
public static float getFloat(ContentResolver cr, String name, float def)
Пример:
scale = android.provider.Settings.System.getFloat(getActivity().getContentResolver(),
android.provider.Settings.System.FONT_SCALE, 1f);
Ответ 4
Вы могли бы использовать getResources().getDisplayMetrics().scaledDensity
- http://developer.android.com/reference/android/util/DisplayMetrics.html#scaledDensity