TextView 的 style 和 android:textAppearance 属性有啥区别?

Posted

技术标签:

【中文标题】TextView 的 style 和 android:textAppearance 属性有啥区别?【英文标题】:What is the difference between TextView's style and android:textAppearance attributes?TextView 的 style 和 android:textAppearance 属性有什么区别? 【发布时间】:2016-11-25 19:19:27 【问题描述】:

如果我将TextView 定义为:

 <TextView
        style="@android:style/TextAppearance.DeviceDefault.Large"
        android:layout_
        android:layout_
        android:text="Hello World!" />

和做的基本一样:

 <TextView
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
        android:layout_
        android:layout_
        android:text="Hello World!" />

我知道style 是某种更广泛的限定符(即不能在android:textAppearance 中设置所有属性),但它提出了一个问题:为什么要麻烦?使用android:textAppearance 比使用style 有什么优势吗?

【问题讨论】:

【参考方案1】:

来自样式和主题https://developer.android.com/guide/topics/ui/look-and-feel/themes#textappearance

样式的一个限制是您只能将一种样式应用于视图。但是,在 TextView 中,您还可以指定 TextAppearance 属性,其功能类似于样式

TextAppearance 允许您定义特定于文本的样式,同时将 View 的样式留作其他用途。但是请注意,如果您直接在视图或样式中定义任何文本属性,这些值将覆盖 TextAppearance 值。

【讨论】:

【参考方案2】:

似乎样式是所有视图的属性,即使 TextView 和 textAppearance 仅应用一些仅适用于文本的“样式组件”。您可以使用styles.xml 应用您自己的样式

https://developer.android.com/guide/topics/resources/style-resource.html https://developer.android.com/reference/android/R.attr.html#textAppearance

文本外观

文本的默认外观:颜色、字体、大小和样式。

风格

这适用于一切

【讨论】:

【参考方案3】:

每个视图只能有一个样式属性,但使用 TextAppearance 实质上允许您使用受限的文本相关属性集定义样式。您可以在一个视图中同时使用样式和 TextAppearance。

【讨论】:

【参考方案4】:

您可以将样式与 TextAppearance 结合使用。 例如,在 TextAppearance 中,您可以为按钮设置所有与文本相关的逻辑。 在样式中,您可以重复使用它并添加额外的属性,例如填充、大小等。

例如,

<style name="TextAppearanceTitle" parent="TextAppearance.MaterialComponents.Button">
    <item name="android:textColor">#f0f</item>
</style>

<style name="SomeButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    <item name="android:textAppearance">@style/TextAppearanceTitle</item>
    <item name="android:padding">12dp</item>
    <item name="android:elevation">4dp</item>
</style>

它可能对某人有用,这里是 TextView 的 TextAppearance 支持的属性列表:

<attr name="textColor" />
<attr name="textSize" />
<attr name="textStyle" />
<attr name="typeface" />
<attr name="fontFamily" />
<attr name="textColorHighlight" />
<attr name="textColorHint" />
<attr name="textColorLink" />
<attr name="textAllCaps" format="boolean" />
<attr name="shadowColor" format="color" />
<attr name="shadowDx" format="float" />
<attr name="shadowDy" format="float" />
<attr name="shadowRadius" format="float" />
<attr name="elegantTextHeight" format="boolean" />
<attr name="letterSpacing" format="float" />
<attr name="fontFeatureSettings" format="string" />

您在样式中设置的所有剩余内容。

【讨论】:

以上是关于TextView 的 style 和 android:textAppearance 属性有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

TextView 的 style 和 android:textAppearance 属性有啥区别?

TextView图文居中混排

TextView用字母打破了我的话

Android TextView怎么引用Style

Android TextView怎么引用Style

如何删除 TextView 上边距?