【发布时间】:2021-04-02 09:56:28
【问题描述】:
我有一个带有自定义 fontFamily 的 TextView 样式。另外,我的 textAppearance 有一个单独的样式。
当我将我的 TextView 样式和 textAppearance 样式设置为单个 TextView 时,fontFamily 被忽略了。但是当样式设置没有 textAppearace 时一切正常。
样式是使用 airbnb 的 Paris 库设置的。
TextView 样式:
<style name="TextViewBold" parent="Widget.MaterialComponents.TextView">
<item name="fontFamily">@font/roboto_bold</item>
<item name="android:fontFamily">@font/roboto_bold</item>
<item name="android:textColor">@color/black</item>
</style>
TextAppearance 样式:
<style name="TextAppearanceAllCaps">
<item name="textAllCaps">true</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">@color/anotherColor</item>
</style>
以编程方式设置样式:
MaterialTextView(context!!).apply {
style(R.style.TextViewBold) //Paris used here
updateTextAppearance(R.style.TextAppearanceAllCaps) //custom extension
setText(R.string.some_text)
}
扩展代码:
fun TextView.updateTextAppearance(@StyleRes resId: Int) {
TextViewCompat.setTextAppearance(this, resId)
}
如何解决此问题?
【问题讨论】:
-
将你的 textAppearance 样式作为一个 item 放入 Textview 样式中
-
@D_K 我不能。因为这种风格是几个 TextView 的基础。使用 textAppearance 我可以为每个 TextView 调整一些特定的东西
-
你可以手动设置textAllCaps和textcolor,所以只要设置属性就行了
-
@D_K 我同意你的观点,但我不想对每个视图都执行这些重复操作。此外,如果样式发生一些变化,单个地方将被重构
标签: android textview styles material-components-android