Android应用程序中TextView的字体大小会根据本地设置更改字体大小而发生变化
我想在我的应用程序中指定自己的文本大小,但是我遇到了一个问题。
当我在设备设置中更改字体大小时,我的应用程序TextView
的字体大小也会改变。
实际上,设置字体大小只影响sp
大小。 所以你需要做的 – 在dp
定义textSize
而不是sp
,那么设置不会改变你的应用中的文本大小。
以下是文档的链接: 尺寸
但是请注意,预期的行为是所有应用程序中的字体都尊重用户的偏好。 用户可能希望调整字体大小的原因有很多,其中一些甚至可能是医学视觉障碍用户。 使用dp
而不是sp
来显示文字可能会导致不愿意区分某些应用程序的用户。
最简单的做法是简单地使用如下所示的内容:
android:textSize="32sp"
如果您想了解有关textSize
属性的更多信息,可以查看Android开发者文档 。
像使用string
资源( DOCS )一样使用dimension
types的资源。
在您的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应用程序也使用相同的方法。 任何其他的想法?