1

В моем приложении для Android есть основной модуль проекта, который имеет следующее объявление в файле стилей. Эта тема используется в файле манифеста в теге «приложение», поэтому все компоненты в элементе «приложение» имеют одну и ту же тему.Android Устанавливает свойства и атрибуты стиля?

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:colorPrimary" tools:ignore="NewApi"> 
     @color/light_black 
    </item> 
    <item name="colorPrimary">@color/light_black</item> 
    <item name="android:colorAccent" tools:ignore="NewApi">@color/sapphire</item> 
    <item name="colorAccent">@color/sapphire</item> 
    <item name="android:colorBackground">@color/primary_background</item> 
    <item name="android:textColorPrimary">@color/title_color</item> 
    <item name="android:colorButtonNormal" tools:ignore="NewApi">@color/sapphire</item> 
    <item name="colorButtonNormal">@color/sapphire</item> 
    <item name="android:colorForeground" tools:ignore="NewApi"> 
     @color/title_color 
    </item> 
    <item name="android:titleTextStyle">@style/toolbar_title</item> 
    <item name="android:navigationIcon" tools:ignore="NewApi"> 
     ?android:attr/homeAsUpIndicator</item> 
    <item name="navigationIcon">?android:attr/homeAsUpIndicator</item> 
    <item name="android:colorControlNormal" tools:ignore="NewApi">@android:color/white</item> 
    <item name="colorControlNormal">@android:color/white</item> 
</style> 

У меня также есть модуль библиотеки рядом с основным модулем проекта, в котором я буду помещать наиболее часто используемые Views, виджеты и BASE-компоненты, которые могут быть повторно использованы с другими приложениями в рамках моего проекта приложения или другие в организация. Что касается объявления о зависимостях от Gradle Dependency, модуль проекта зависит от модуля библиотеки, а не наоборот.

Как мне разрешить «colorAccent» и «colorControlNormal» по умолчанию андроидные атрибуты в моей кодовой базе компонентов модуля библиотеки во время выполнения в зависимости от темы соответствующего контекста (экземпляра действия) в основном модуле проекта?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools"> 
<item android:color="?android:attr/colorControlNormal" 
    android:state_activated="false" 
    tools:ignore="NewApi"/> 

<item android:color="?android:attr/colorAccent" 
    android:state_activated="true" 
    tools:ignore="NewApi"/> 
</selector> 

ответ

0

Так вот как я это исправил.

attrs.xml в библиотечном модуле. Обратите внимание, что формат представляет собой «целое число», хотя атрибуты, предположительно, являются цветами.

<attr name="progressColorControlNormal" format="reference|integer" /> 
<attr name="progressColorAccent" format="reference|integer" /> 

Поскольку основной модуль проекта зависит от модуля библиотеки, я мог бы получить доступ к этим атрибутам в определении темы в файле styles.xml.

<item name="progressColorControlNormal">@android:color/white</item> 
<item name="progressColorAccent">@color/sapphire</item> 

ли замечаете разрешенные значения для цветов, а не ссылки от темы сам, такие как «Android?: Атр/colorControlNormal» и «андроид:? Атр/colorAccent», или их вариантов.

Выбираемый xml в модуле библиотеки теперь автоматически разрешает Themed Colors.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <item android:color="?progressColorControlNormal" 
     android:state_activated="false" 
     tools:ignore="NewApi"/> 

    <item android:color="?progressColorAccent" 
     android:state_activated="true" 
     tools:ignore="NewApi"/> 
</selector> 
Смежные вопросы