Я создаю приложение для Android.Он состоит из двух модулей.Конкретный модуль и основной модуль.В основном модуле я определил основные компоненты приложения, стили и действия.В конкретном я делаю настройки для каждого клиента.
Моя проблема в том, что у меня есть атрибут, определенный в core > styles.xml > AppTheme > myAttr
, и я хочу переопределить его в specific > styles.xml > MyAppTheme (which extends from AppTheme) > myAtrr
.В результате, если я использую ?attr/myAttr
в XML-макете, значение всегда совпадает со значением базовой части, оно не переопределяется конкретным значением части.
Если я попытаюсь использовать атрибут в коде, используя getActivity().getTheme().obtainStyledAttributes()
, получится результат из основной части.
Любая мысль о том, что здесь происходит, приветствуется.
Структура кода
Я определил в core 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
, так как я переопределяю его.