我想在我的应用程序中指定我自己的文本大小,但我这样做有一个问题。
当我在设备设置中改变字体大小时,我的应用程序TextView的字体大小也会改变。
我想在我的应用程序中指定我自己的文本大小,但我这样做有一个问题。
当我在设备设置中改变字体大小时,我的应用程序TextView的字体大小也会改变。
当前回答
在Activity中重写getResources()。
设置TextView的大小在sp通常像android:textSize="32sp"
override fun getResources(): Resources {
return super.getResources().apply {
configuration.fontScale = 1F
updateConfiguration(configuration, displayMetrics)
}
}
其他回答
防止整个应用程序受到系统字体大小影响的简单方法是使用一个基本活动updateConfiguration。
//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
你可以使用下面的代码:
android:textSize="32dp"
它解决了你的问题,但你必须知道你应该尊重用户的决定。 这样,从设备设置中更改文本大小不会更改此值。这就是用sp代替dp的原因。 所以我的建议是使用不同的系统字体大小(小,正常,大,…)
https://stacklearn.ir
在Activity中重写getResources()。
设置TextView的大小在sp通常像android:textSize="32sp"
override fun getResources(): Resources {
return super.getResources().apply {
configuration.fontScale = 1F
updateConfiguration(configuration, displayMetrics)
}
}
还要注意,如果在代码中设置了textSize,调用textView.setTextSize(X)将数字(X)解释为SP。COMPLEX_UNIT_DIP, X)在dp中设置值。
最简单的方法就是使用如下代码:
android:textSize="32sp"
如果你想了解更多关于textSize属性的信息,你可以查看Android开发者文档。