我想创建我将在TextView的android:textAppearance
中使用的样式。但是这种风格在不同的API级别上有所不同,所以我希望:
android:textAppearance
参数(布局文件适用于所有API级别)。我尝试了Google和Stack的多种组合,最后结束了这样的事情(当然不行):
值/ attrs.xml
<attr name="myTextAppearance" format="reference" />
值/ styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="myTextAppearance">@style/CommonTextAppearance</item>
</style>
<style name="CommonTextAppearance">
<item name="android:textColor">#00f</item>
</style>
值-V16 / styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="myTextAppearance">@style/V16TextAppearance</item>
</style>
<style name="V16TextAppearance" parent="CommonTextAppearance">
<item name="android:textSize">20sp</item>
</style>
布局/ activity_main.xml中
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Lorem"
android:textAppearance="?attr/myTextAppearance"/>
</RelativeLayout>
目前我收到了一个错误:
无法找到当前主题的主题资源?attr / myTextAppearance
我花了很多时间尝试自己做这件事,但我失败了。你能帮帮我吗?
答案 0 :(得分:0)
这是因为?attr / [name]值是对所有者样式参数的引用。如果没有[name]的参数,则代码将回退到主题中定义的默认参数集。
基本上,TextView类检查layout xml中定义的内联样式,然后是默认主题,然后是textViewStyle引用。它们都不包含myTextAppearance属性。
您必须覆盖视图,并在构造函数中使用obtainStyledAttributes。将您的主题属性作为默认属性传递。然后解析该值并将其用作新的文本外观。