2016-08-26 12 views
1

私のAndroidアプリケーションには、スタイルファイルに次のような宣言があるメインプロジェクトモジュールがあります。このテーマは "application"タグのManifestファイルで使用されるため、 "application"要素内のすべてのコンポーネントに同じテーマが適用されます。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> 

は、私はまた、ライブラリモジュールを持って、私は内、最も一般的に使用されるビュー、ウィジェットと私のアプリケーションプロジェクト内の他のアプリケーションで再利用することができますベースのコンポーネント、または他の人を置くことになる主なプロジェクトモジュール、隣組織。 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> 

などのテーマ自体からの参照色の解決値を気づきませんし、ない「アンドロイド:?/ colorControlNormalのattr」と「?アンドロイド:attrの/ colorAccent」、またはそれらの変形。

ライブラリモジュールのdrawable 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> 
関連する問題