使用颜色将drawable设置为TextView以支持多个主题

时间:2015-07-02 01:36:21

标签: android xml styles themes attr

我希望有一个像这样的CardView列表,我的两个主题是:

http://i.stack.imgur.com/x0VqA.jpg

我想为每个主题的textview提供不同的背景颜色。 所以,在我的行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" />`

和drawable&#34; idcardview.xml&#34;是:

<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>

当我运行应用程序并转到列表活动时,会出现以下错误:

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)

但是当我更改&#34; idcardview.xml&#34;纯色到一种颜色(例如,#181818),应用程序运行正常。但我希望它能改变浅色和深色主题的背景色。 使用Android Studio,min Sdk 11,目标SDK 22。

1 个答案:

答案 0 :(得分:0)

好的,我的问题解决了。 问题是在styles.xml中定义的主题。 我删除了这部分:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>

所以在此之后,我有两个自定义主题,现在当我在xmls中使用属性时,不会发生错误。 我用纯色为每个TextView创建了两个drawable,因为我需要为背景的角落圆角,一个用于浅色主题,另一个用于暗色主题。 希望这可以帮助任何有同样问题的人。