从“设置”中读取字体大小

时间:2013-05-14 13:45:40

标签: android settings android-permissions

这个问题几乎与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设备。顺便说一下,我的代码位于onCreate的{​​{1}}回调中。

我也搜索了该问题并发现了大约3个使用相同代码的网站。是否需要一些特殊许可?我也尝试了Activity许可但没有成功。

4 个答案:

答案 0 :(得分:32)

我刚在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已经使用了,所以我检查了文档指向getResources().getConfiguration()的{​​{3}}类。因此,我使用以下方法修复我的代码:

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

答案 1 :(得分:4)

您可以根据字体比例设置系统字体。

示例:对于巨大的字体比例是2.0,您可以设置如下。

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

答案 2 :(得分:1)

将“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);

答案 3 :(得分:-1)

您可以使用getResources().getDisplayMetrics().scaledDensity - http://developer.android.com/reference/android/util/DisplayMetrics.html#scaledDensity