2015-07-02 51 views
1

我想有這樣CardViews清單,爲我的兩個主題:設置顏色繪製到一個TextView支持多個主題

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

我想爲textviews每個不同的背景顏色主題。 所以,在我行的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> 

當我運行的應用程序,並去到列表中的活動,它就會出現以下錯誤:

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,min Sdk 11,目標SDK 22.

+1

我在評論中發現了此解決方法,但我無法執行此操作: 在顏色選擇器內部使用主題屬性僅在最新版本的Android中支持XML文件。爲了克服這個限制,你需要爲每個主題創建一個顏色選擇器文件,並用純色填充它們。然後根據主題創建指向正確顏色選擇器的主題屬性。 – Hossein

回答

0

好的,我的問題解決了。 問題是在styles.xml中定義的主題。 我刪除了這部分:

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

所以在此之後,我有兩個自定義主題,現在當我用個XML屬性,沒有錯誤發生。 我用純色爲每個TextView創建了兩個drawable,因爲我需要圍繞背景的角落,一個用於燈光主題,另一個用於黑暗主題。 希望這可以幫助任何有同樣問題的人。

相關問題