将带有颜色的可绘制对象设置为 TextView 以支持多个主题
Setting drawable with colors to a TextView for supporting multiple themes
我想要一个这样的 CardView 列表,用于我的两个主题:
http://i.stack.imgur.com/x0VqA.jpg
我想为每个主题的文本视图设置不同的背景颜色。
因此,在我的行 xml 中,我有以下 TextView:
<TextView
android:id="@+id/txtTipListId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="17"
android:background="@drawable/idcardview"
android:gravity="center|center_vertical"
android:textColor="@color/colorShadowInverse"
android:textSize="@dimen/abc_text_size_medium_material"
android:textStyle="bold" />`
可绘制对象 "idcardview.xml" 是:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?attr/themedCardBackgroundColor"/>
<corners android:bottomRightRadius="10dp"
android:topRightRadius="10dp"/>
</shape>
并在 attrs.xml 中:
<resources>
<attr name="themedCardBackgroundColor" format="reference" />
</resources>
在样式中:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="themedCardBackgroundColor">@color/colorShadowInverse</item>
</style>
<style name="AppTheme.Light" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="themedCardBackgroundColor">@color/colorShadow</item>
</style>
</resources>
并在 colors.xml 中:
<resources>
<color name="colorPrimary">#FF9800</color>
<color name="colorPrimaryDark">#F57C00</color>
<color name="colorPrimaryLight">#FFE0B2</color>
<color name="colorAccent">#FF5252</color>
<color name="colorShadow">#E0E0E0</color>
<color name="colorShadowInverse">#181818</color>
</resources>
当我 运行 应用程序并转到列表 activity 时,出现以下错误:
android.view.InflateException: Binary XML file line #32: Error inflating class TextView
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/idcardview.xml from drawable resource ID #0x7f02003b
at android.content.res.Resources.loadDrawable(Resources.java:1923)
at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
at android.view.View.<init>(View.java:2785)
但是当我将 "idcardview.xml" 纯色更改为仅一种颜色(例如,#181818)时,应用 运行 没问题。但我希望它改变浅色和深色主题的背景颜色。
使用 Android Studio,最低 SDK 11,目标 SDK 22。
好的,我的问题解决了。
问题出在 styles.xml 中定义的主题。
我删除了这部分:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>
所以在此之后,我有两个自定义主题,现在当我在 xml 中使用属性时,不会发生错误。
我为每个纯色的 TextView 创建了两个可绘制对象,因为我需要对背景进行圆角处理,一个用于浅色主题,另一个用于深色主题。
希望这对遇到同样问题的人有所帮助。
我想要一个这样的 CardView 列表,用于我的两个主题:
http://i.stack.imgur.com/x0VqA.jpg
我想为每个主题的文本视图设置不同的背景颜色。 因此,在我的行 xml 中,我有以下 TextView:
<TextView
android:id="@+id/txtTipListId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="17"
android:background="@drawable/idcardview"
android:gravity="center|center_vertical"
android:textColor="@color/colorShadowInverse"
android:textSize="@dimen/abc_text_size_medium_material"
android:textStyle="bold" />`
可绘制对象 "idcardview.xml" 是:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?attr/themedCardBackgroundColor"/>
<corners android:bottomRightRadius="10dp"
android:topRightRadius="10dp"/>
</shape>
并在 attrs.xml 中:
<resources>
<attr name="themedCardBackgroundColor" format="reference" />
</resources>
在样式中:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="themedCardBackgroundColor">@color/colorShadowInverse</item>
</style>
<style name="AppTheme.Light" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="themedCardBackgroundColor">@color/colorShadow</item>
</style>
</resources>
并在 colors.xml 中:
<resources>
<color name="colorPrimary">#FF9800</color>
<color name="colorPrimaryDark">#F57C00</color>
<color name="colorPrimaryLight">#FFE0B2</color>
<color name="colorAccent">#FF5252</color>
<color name="colorShadow">#E0E0E0</color>
<color name="colorShadowInverse">#181818</color>
</resources>
当我 运行 应用程序并转到列表 activity 时,出现以下错误:
android.view.InflateException: Binary XML file line #32: Error inflating class TextView
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/idcardview.xml from drawable resource ID #0x7f02003b
at android.content.res.Resources.loadDrawable(Resources.java:1923)
at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
at android.view.View.<init>(View.java:2785)
但是当我将 "idcardview.xml" 纯色更改为仅一种颜色(例如,#181818)时,应用 运行 没问题。但我希望它改变浅色和深色主题的背景颜色。 使用 Android Studio,最低 SDK 11,目标 SDK 22。
好的,我的问题解决了。 问题出在 styles.xml 中定义的主题。 我删除了这部分:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>
所以在此之后,我有两个自定义主题,现在当我在 xml 中使用属性时,不会发生错误。 我为每个纯色的 TextView 创建了两个可绘制对象,因为我需要对背景进行圆角处理,一个用于浅色主题,另一个用于深色主题。 希望这对遇到同样问题的人有所帮助。