2014-09-12 1 views
1

Pour mettre en œuvre thématisation, je défini attribue mon style personnalisé pour éviter les styles du système prépondérantsaccident étrange « android.view.InflateException: ligne fichier XML binaire # 9: Classe d'erreur de gonflage <unknown> » à propos de déclarer-styleable

thèmes. xml

<declare-styleable name="MyThemeBase"> 
    <attr name="myTextColorHighlight" format="reference|color"/> 
</declare-styleable> 

<style name="MyThemeBase" parent="@style/Theme.AppCompat.Light"> 
    ... 
</style> 

<style name="MY.Theme.AppCompat.Light.Orange" parent="SCThemeBase"> 
    <item name="myTextColorHighlight">@color/textcolor_highlight_orange</item> 
</style> 

<style name="MY.Theme.AppCompat.Light.Blue" parent="SCThemeBase"> 
    <item name="myTextColorHighlight">@color/textcolor_highlight_blue</item> 
</style> 

J'ai aussi Defined TextAppearance personnalisé styles.xml

<style name="My.TextAppearance.Medium" parent="@android:style/TextAppearance.Medium"> 
    <!-- this line caused crash --> 
    <item name="android:textColor">?attr/myTextColorHighlight</item> 

    <!-- this worked --> 
    <!--<item name="android:textColor">@color/textcolor_highlight_orange</item>--> 
</style> 

Dans les xml de mise en page, certains TextViews référencés au-dessus du style MY.TextAppearance.Medium, tout semblait si bon. Mais je suis un accident alors que layouting TextView qui était dans un ListView, la stacktrace était

android.view.InflateException: Binary XML file line #9: Error inflating class <unknown> 
     at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:666) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
     at com.xxx.yyy.MyListAdatper.getView(MyListAdatper.java:46) 

On a d'autres TextViews plus bizarre dans même style ont été bien

Je ne sais pas pourquoi je suis tombé sur ce sujet. Avec un peu de débogage, j'ai juste trouvé que cela fonctionnait seulement si j'utilisais la couleur directe au lieu de la référence attr (s'il vous plaît consulter le commentaire ci-dessus styles.xml) dans la définition de My.TextAppearance.Medium.

Quelqu'un peut-il aider? Merci.

+0

'? Attr/myTextColorHighlight' ne devrait-il pas être'? Attr/textColorHighlight'? –

+0

@Kenny, j'ai déclaré myTextColorHighlight – fifth

+0

Ah, désolé. Mes excuses. –

Répondre

0

Je pense que le problème est avec votre approche. Ce que vous avez défini est un attribut personnalisable, c'est-à-dire un attribut personnalisé auquel vous souhaitez attribuer des valeurs différentes. Au lieu de cela, ce que vous voulez, c'est une référence d'attribut, qui est un identifiant constant qui peut être assigné différentes valeurs selon le thème.

Pour cela, au lieu de:

<declare-styleable name="MyThemeBase"> 
    <attr name="myTextColorHighlight" format="reference|color"/> 
</declare-styleable> 

Il suffit de mettre:

<attr name="myTextColorHighlight" format="reference|color"/> 

C'est, il vous suffit d'enlever l'emballage "déclare-styleable". Cela devrait le faire fonctionner sans problèmes.

Questions connexes