Android解析样式属性和属性?

时间:2016-08-26 20:10:03

标签: android styles themes shared-libraries android-attributes

我的Android应用程序有一个主项目模块,在样式文件中有以下声明。此主题用于“application”标记上的Manifest文件中,因此“application”元素中的所有组件都应用了相同的主题。

<?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>

我还在主项目模块旁边有一个库模块,我将放置最常用的视图,窗口小部件和基本组件,可以与我的应用程序项目中的其他应用程序或组织内的其他应用程序一起使用。至于Gradle Dependency声明,当然,Project Module依赖于Library Module,而不是相反。

如何在运行时解析我的Library Module组件代码库中的“colorAccent”和“colorControlNormal”默认android-attributes,具体取决于主项目模块中相应Context(Activity实例)的主题?

{{1}}

1 个答案:

答案 0 :(得分:0)

所以这就是我如何解决这个问题。

库模块中的attrs.xml。请注意,格式是“整数”,但属性应该是颜色。

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

因为主项目模块依赖于库模块,所以我可以在styles.xml文件的Theme定义中访问这些属性。

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

请注意颜色的已解析值,而不是主题本身的引用,例如“?android:attr / colorControlNormal”和“?android:attr / colorAccent”或其变体。

库模块中的可绘制xml现在自动解析主题颜色。

<?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>