2013-05-14 3 views
11

Этот вопрос почти dublicate Android App: how to read Font Size under Settings? Я прочитал ответ 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 устройство. Кстати, этот код находится в обратном вызове onCreateActivity.

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

+0

Хмм, я не уверен, что вам нужно это прочитать. Разве система не делает масштабирование для вас, пока вы используете sp единиц? – Teovald

+0

Ну конечно, но у меня есть некоторые графические ошибки, которые мне нужно исправить с помощью этого масштабного коэффициента. – rekire

ответ

27

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

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

+1

Нет, это постоянное значение. На моем устройстве это всегда '1.33'. Я попробовал это, прежде чем обнаружил, что «FONT_SCALE». – rekire

+0

Какое устройство у вас есть? Угадайте Nexus 7? – FunkTheMonk

+0

Да, Nexus 7, это известная ошибка? – rekire

3

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

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

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

Добавить "всплывают DEF" параметров к концу общественности статической флоат GetFloat (ContentResolver кр, имя строкового всплывают DEF)

Пример:

шкала = android.provider.Settings .System.getFloat (getActivity(). GetContentResolver(), android.provider.Settings.System.FONT_SCALE, 1f);

Смежные вопросы