前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 解决系统字体大小设置引起的布局混乱问题

Android 解决系统字体大小设置引起的布局混乱问题

作者头像
码客说
发布2020-05-09 14:46:50
1.8K0
发布2020-05-09 14:46:50
举报
文章被收录于专栏:码客码客

解决方法

在 activity 内重写getResources方法(Fragment中的界面也会生效),如此在 xmljava 代码使用 sp 字体单位都是正常的。一般在BaseActivity内重写。

Java写法

代码语言:javascript
复制
/**
* 设置 app 字体不随系统字体设置改变
*/
@Override
public Resources getResources() {
    Resources res = super.getResources();
    if (res != null) {
        Configuration config = res.getConfiguration();
        if (config != null && config.fontScale != 1.0f) {
            config.fontScale = 1.0f;
            res.updateConfiguration(config, res.getDisplayMetrics());
        }
    }
    return res;
}

Kotlin写法

代码语言:javascript
复制
override fun getResources(): Resources {
    val res = super.getResources()
    if (res != null) {
        val config = res.configuration
        if (config != null && config.fontScale !== 1.0f) {
            config.fontScale = 1.0f
            res.updateConfiguration(config, res.displayMetrics)
        }
    }
    return res
}

注意!网上很多地方写着使用config.setToDefaults();,实际上除了影响 app 内字体大小,还会影响很多地方的属性值。我们来看一下源码:

代码语言:javascript
复制
/**
* Set this object to the system defaults.
*/
public void setToDefaults() {
    fontScale = 1;
    mcc = mnc = 0;
    mLocaleList = LocaleList.getEmptyLocaleList();
    locale = null;
    userSetLocale = false;
    touchscreen = TOUCHSCREEN_UNDEFINED;
    keyboard = KEYBOARD_UNDEFINED;
    keyboardHidden = KEYBOARDHIDDEN_UNDEFINED;
    hardKeyboardHidden = HARDKEYBOARDHIDDEN_UNDEFINED;
    navigation = NAVIGATION_UNDEFINED;
    navigationHidden = NAVIGATIONHIDDEN_UNDEFINED;
    orientation = ORIENTATION_UNDEFINED;
    screenLayout = SCREENLAYOUT_UNDEFINED;
    uiMode = UI_MODE_TYPE_UNDEFINED;
    screenWidthDp = compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED;
    screenHeightDp = compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED;
    smallestScreenWidthDp = compatSmallestScreenWidthDp = SMALLEST_SCREEN_WIDTH_DP_UNDEFINED;
    densityDpi = DENSITY_DPI_UNDEFINED;
    seq = 0;
}

因此,我们只需要把fontScale属性值设置成默认值1即可。

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com