我正在尝试为我的应用程序开发两个主题,并且根据主题,我需要一个View来使用不同的选择器。虽然当我创建一个确定要使用的正确选择器的引用时,我会收到InflationException错误。
这是我的attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ReditrTheme">
<attr name="downvoteArrow" format="reference" />
<attr name="upvoteArrow" format="reference" />
</declare-styleable>
<declare-styleable name="VoteState">
<attr name="enabled" format="boolean" />
</declare-styleable>
</resources>
这是我的themes.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DarkTheme" parent="@android:style/Theme.Holo">
<item name="upvoteArrow">@drawable/upvote_states</item>
<item name="downvoteArrow">@drawable/downvote_states</item>
</style>
<style name="LightTheme" parent="@android:style/Theme.Holo.Light">
<item name="upvoteArrow">@drawable/upvote_states_l</item>
<item name="downvoteArrow">@drawable/downvote_states_l</item>
</style>
</resources>
这是我的upvote_states.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.reditr.app">
<item android:drawable="@drawable/ic_action_arrow_top_colored" app:enabled="true"/>
<item style="@drawable/ic_action_arrow_top" app:enabled="false"/>
</selector>
这是我的upvotes_states_l.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.reditr.app">
<item android:drawable="@drawable/ic_action_arrow_top_colored" app:enabled="true"/>
<item style="@drawable/ic_action_arrow_top_l" app:enabled="false"/>
</selector>
downvotes_states.xml和downvotes_states_l.xml与上面的相同,只是使用ic_action_arrow_bottom。
最后,这是我的视图,我正在尝试将引用应用于:
<com.example.views.UpvoteView
android:id="@+id/upvote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:scaleType="fitCenter"
android:src="?attr/upvoteArrow" />
我在网上尝试了一些解决方案,但它们总是与我的问题略有不同,并没有解决我的问题。
提前致谢!
答案 0 :(得分:0)
刚刚意识到我犯的错误。在我的states.xml文件中,我出于某种原因使用了style属性,它应该是android:drawable。