Переопределение ресурсов - PullRequest
3 голосов
/ 07 марта 2019

Я создаю приложение для 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, так как я переопределяю его.

1 Ответ

0 голосов
/ 14 марта 2019

Я предлагаю вам использовать Ароматизатор продукта . С помощью разновидностей продукта вы можете определить исходные наборы и переопределить любую часть основного модуля (ресурсы, ресурсы, источники Java).

...