我正在构建一个Android应用。它由两个模块组成。具体模块和核心模块。在核心模块中,我定义了基本的应用程序组件,样式和活动。在特定的示例中,我为每个客户进行自定义。
我的问题是我有一个在core > styles.xml > AppTheme > myAttr
中定义的属性,我想在specific > styles.xml > MyAppTheme (which extends from AppTheme) > myAtrr
中覆盖它。结果是,如果我在XML布局中使用?attr/myAttr
,则该值始终是核心部分中的值,不会被特定的部分值覆盖。
如果我尝试使用getActivity().getTheme().obtainStyledAttributes()
在代码中使用该属性,则结果是核心部分中的结果。
任何关于这里发生的事情的想法都很好,谢谢。
代码结构
我已经在核心styles.xml中定义了名为AppTheme
的主题中的默认资源:
<resources>
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="cat_commstate_loading_transition">@drawable/commstate_loading</item>
</style>
<attr name="cat_commstate_loading_transition" format="reference"/>
</resources>
和commstate_loading.xml
定义为:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
android:visible="true">
<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_1"/>
<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_2"/>
<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_3"/>
</animation-list>
我使用这样的资源:
<pl.droidsonroids.gif.GifImageView
android:id="@+id/act_challenge_transition_loading_animation"
android:layout_width="150dp"
android:layout_height="150dp"
android:theme="@style/MyAppTheme"
android:layout_gravity="center"
android:src="?attr/cat_commstate_loading_transition" />
所以,我有一个默认的动画,可以在多个项目中正常工作。
现在,在我想覆盖资源的情况下,我将在核心部分中定义的AppTheme
扩展为特定的部分,如下所示:
<resources>
<style name="MyAppTheme" parent="@style/AppTheme">
<item name="cat_commstate_loading_transition">@drawable/commstate_loading_corporate</item>
</style>
</resources>
commstate_loading_corporate
资源是:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
android:visible="true">
<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_corporate_1"/>
<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_2"/>
<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_3"/>
<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_4"/>
<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_5"/>
</animation-list>
根据我的观点,此时,引用?attr/cat_commstate_loading_transition
应该引用commstate_loading_corporate
资源,因为我将其覆盖。