我想在我的应用程序中指定我自己的文本大小,但我这样做有一个问题。

当我在设备设置中改变字体大小时,我的应用程序TextView的字体大小也会改变。


当前回答

将DP更改为sp,这是android的良好实践 android: textSize = " 18 sp "

其他回答

将DP更改为sp,这是android的良好实践 android: textSize = " 18 sp "

如果使用的单位是SP,而不是DP,并且你想覆盖系统字体缩放,你所要做的就是覆盖activity中的一个方法——请看这篇文章。

资源。updateConfiguration已弃用且有bug(在Oreo上,我有格式化文本的问题)。

如果已经在dimension .xml文件中定义了DIP或SP,那么必须通过代码再次指定DIP或SP并不是一件好事。

我认为最好的选择是在使用dimension .xml值时使用PX:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));

这样,如果需要,您可以在dimension .xml文件中从DP切换到SP,而无需更改任何代码。

在android 8中,这个解决方案适合我

在基本活动中添加此代码

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    final Configuration override = new Configuration(newBase.getResources().getConfiguration());
    override.fontScale = 1.0f;
    applyOverrideConfiguration(override);
}

源 https://stackoverflow.com/a/57225687/7985871

在Activity中重写getResources()。

设置TextView的大小在sp通常像android:textSize="32sp"

override fun getResources(): Resources {
    return super.getResources().apply {
        configuration.fontScale = 1F
        updateConfiguration(configuration, displayMetrics)
    }
}