获取字体比例因子以计算字体大小 [英] Get font scaling factor to calculate the fontsize

查看:25
本文介绍了获取字体比例因子以计算字体大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题与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设备。顺便说一句,该代码位于ActivityonCreate回调中。

我也在谷歌上搜索了这个问题,找到了大约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

这篇关于获取字体比例因子以计算字体大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆