Get font scaling factor to calculate the fontsize(获取字体比例因子以计算字体大小)
问题描述
这个问题与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设备。顺便说一句,该代码位于Activity
的onCreate
回调中。
我也在谷歌上搜索了这个问题,找到了大约3个使用相同代码的站点。需要一些特别许可吗?我还尝试了权限android.permission.WRITE_SETTINGS
,但没有成功。
推荐答案
我刚刚在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()
的Configuration
类。因此我可以使用以下命令修复代码:
float scale = getResources().getConfiguration().fontScale;
因为我的问题是要计算以像素为单位的正确字体大小,所以我现在在Kotlin使用它的方式是:
val Number.dpInPx: Int
get() = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, toFloat(), Resources.getSystem().displayMetrics).toInt()
val Number.spInPx: Int
get() = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP, toFloat(), Resources.getSystem().displayMetrics).toInt()
用法为:
val textSize = 42.spInPx
val padding = 8.dpInPx
这篇关于获取字体比例因子以计算字体大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!