奇怪的崩溃&#34; android.view.InflateException:二进制XML文件行#9:错误膨胀类<unknown>&#34;关于declare-styleable </unknown>

时间:2014-09-12 02:45:43

标签: android android-layout android-styles

为了实现主题,我定义了自定义样式属性以避免覆盖系统样式

的themes.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>

我还定义了自定义TextAppearance 的 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>

在布局xmls中,一些TextViews在MY.TextAppearance.Medium样式上面引用,到目前为止一切看起来都那么好。但是在布局一个ListView中的TextView时,我遇到了崩溃,堆栈跟踪是

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)

最奇怪的是同样风格的其他TextView很好

我不知道为什么我遇到这个。通过一些调试,我发现它只有在My.TextAppearance.Medium的定义中使用直接颜色而不是attr引用(请在styles.xml上面查看注释)时才有效。

任何人都可以提供帮助?感谢。

1 个答案:

答案 0 :(得分:0)

我认为问题出在你的方法上。您定义的是一个可定制的,即您希望能够为其分配不同值的自定义属性。

相反,你想要的是一个属性引用,它是一个常量id,可以根据主题分配不同的值。

为此,而不是:

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

刚刚提出:

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

也就是说,你只需要删除&#34; declare-styleable&#34;包装。这应该使它没有问题。