这个问题几乎与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
许可但没有成功。
答案 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