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

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


当前回答

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

其他回答

对于kotlin,这对我来说是有效的

priceTextView.textSize = 12f

实际上,设置字体大小只影响sp中的大小。所以你所需要做的-在dp中定义textSize而不是sp,然后设置不会改变应用程序中的文本大小。

这里是文档的链接:Dimensions

但是请注意,预期的行为是所有应用程序中的字体都尊重用户的偏好。用户可能有很多原因想要调整字体大小,其中一些甚至可能是医疗视力受损的用户。使用dp而不是sp作为文本可能会导致不情愿地歧视你的应用程序的一些用户。

即:

android:textSize="32dp"

防止整个应用程序受到系统字体大小影响的简单方法是使用一个基本活动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());
}

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

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

你可以使用下面的代码:

android:textSize="32dp"

它解决了你的问题,但你必须知道你应该尊重用户的决定。 这样,从设备设置中更改文本大小不会更改此值。这就是用sp代替dp的原因。 所以我的建议是使用不同的系统字体大小(小,正常,大,…)

https://stacklearn.ir