Android应用程序中TextView的字体大小会根据本地设置更改字体大小而发生变化

我想在我的应用程序中指定自己的文本大小,但是我遇到了一个问题。

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

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

以下是文档的链接: 尺寸

但是请注意,预期的行为是所有应用程序中的字体都尊重用户的偏好。 用户可能希望调整字体大小的原因有很多,其中一些甚至可能是医学视觉障碍用户。 使用dp而不是sp来显示文字可能会导致不愿意区分某些应用程序的用户。

最简单的做法是简单地使用如下所示的内容:

 android:textSize="32sp" 

如果您想了解有关textSize属性的更多信息,可以查看Android开发者文档 。

像使用string资源( DOCS )一样使用dimensiontypes的资源。

在您的dimens.xml文件中,声明您的维度variables:

 <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="textview_height">25dp</dimen> <dimen name="textview_width">150dp</dimen> <dimen name="ball_radius">30dp</dimen> <dimen name="font_size">16sp</dimen> </resources> 

那么你可以使用这样的值:

 <TextView android:layout_height="@dimen/textview_height" android:layout_width="@dimen/textview_width" android:textSize="@dimen/font_size"/> 

您可以为不同types的屏幕声明不同的dimens.xml文件。 这样做可以保证您的应用在不同设备上的外观。

当你不指定android:textSize ,系统使用默认值。

另请注意,如果textSize设置在代码中,则调用textView.setTextSize(X)将数字(X)解释为SP。 使用setTextSize(TypedValue.COMPLEX_UNIT_DIP, X)dp中设置值。

当已经在dimen.xml文件中定义时,必须通过代码再次指定DIP或SP并不是一件好事。

我认为最好的select是在使用dimen.xml值时使用PX:

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

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

font size in DPs instead of SPs in textSize使用font size in DPs instead of SPs in textSize解决了这个问题。 我猜Facebook的Android应用程序也使用相同的方法。 任何其他的想法?