安卓中TextView的TextAppearance属性

11

我正在开发一个Android应用程序,在屏幕上使用TextView来显示文本。

我使用以下属性为TextView设置文本大小android:textAppearance="?android:attr/textAppearanceMedium"

我需要设置文本大小吗?还是它会自动由Android操作系统管理?

提前感谢。


有一个默认值。如果你想改变它,那么是的,你需要编写代码。 - user1932079
@JeremyMiller 这是否意味着如果我使用 android:textAppearance 并手动设置文本大小? - N Sharma
试一下。为什么要加载浏览器、登录、输入大量文本、提交,等待……而不是仅仅尝试一下 -- 如果有问题再进行所有这些操作?如果您已经尝试了所有这些,那么请发布代码,以便其他人可以提供有针对性的帮助。 - user1932079
@JeremyMiller,我从您的第一条评论中得到了答案,但我仍有一个疑问,在这里发问:https://dev59.com/cGAf5IYBdhLWcg3w0Ve7#gRcNoYgBc1ULPQZF6pTC - N Sharma
1
@Williams 如果你想使用 android:textAppearance="?android:attr/textAppearanceMedium",你不需要改变字体大小,Android 会在所有显示中自动处理。 - Shayan Pourvatan
显示剩余4条评论
3个回答

17

是的,调整大小是在后台自动完成的。

在使用像 android:textAppearance 这样的属性时,它直接使用预定义的特定 sp 值作为 textSize:

android:textAppearance="?android:textAppearanceSmall" => 14sp

android:textAppearance="?android:textAppearanceMedium" => 18sp

android:textAppearance="?android:textAppearanceLarge" => 22sp
因此,它根据屏幕密度用户的偏好自动调整值,使其在所有设备上看起来相等,例如dp值的公式:

px = dp * (dpi/160)

对于仅用于字体的sp值也是类似的情况,它使用相同的概念,唯一的区别是由于用户在设置中设置的字体大小偏好而可能有所不同。

我没有使用:attr/类型,因为它可能会被使用,也可能不会被使用,并且起到了同样的作用,因为系统资源工具知道在此上下文中预期的是属性资源,您无需显式地声明类型。


4

我需要设置文本的大小吗?还是由Android操作系统自动管理?

不需要,使用android:textAppearance="?android:attr/textAppearanceMedium会使不同设备上的所有文本都以中等大小显示。这意味着您的应用程序在不同设备上的文本将具有相同的大小和重量。

要设置每个文本的大小,需要进行计算才能实现相同的大小和重量。


如果我使用android:textAppearance="?android:attr/textAppearanceMedium",您确定它在所有Android密度上具有相同的文本大小吗? - N Sharma
@Williams 是的,与其设置文本大小,这里有一个代码可以让您在所有不同设备上设置文本大小。textSize=factor*height - Rod_Algonquin
1
但我认为Android根据密度定义了不同的文本大小值 android:textAppearance="?android:attr/textAppearanceMedium - N Sharma
@Williams 是的,不同设备具有不同的dpi值,但对于不同设备来说,效果/大小是相同的。 - Rod_Algonquin
为什么一些平板电脑不支持完全的TextAppearance? - Ajay Pandya
@Rod_Algonquin 我认为使用textAppearanceMedium只是在不同的密度下相同,而不是设备大小的差异。 - Mahdi-bagvand

3

在Android文本元素中,有一个默认值首先被应用(类似于网页)。如果您希望覆盖它们并定义自己的值,则必须明确设置它们。android:textAppearance是一种这样的覆盖方式,但是还有其他属性可以单独覆盖(而不是作为聚合体)... 您需要查看文档了解更多信息。


我看到你仍然没有回答“这是否意味着如果我同时使用android:textAppearance和手动设置文本大小?” - N Sharma
我不理解那个最后的问题(在评论中)。你能简要演示一下吗? - user1932079
我的意思是,如果我将android:textAppearance设置为TextView,并且使用setText(15)将文本大小设置为相同的TextView,那么使用android:textAppearance属性有什么用呢? - N Sharma
无论设置的是哪一个,我相信最后设置的值将会覆盖之前的值。只有想要覆盖才有这样做的必要。例如,默认情况下文本大小为24sp,但在特定情况下您希望它为36sp。 - user1932079

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接