ライブラリプロジェクトで構成されるAndroidプロジェクトでは、メインアプリとライブラリのマニフェストに別のテーマを設定する必要があります。メインプロジェクトで以下のテーマを設定する必要があるように
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/grey</item>
<item name="colorPrimaryDark">@color/black</item>
<item name="colorAccent">@color/green</item>
</style>
図書館プロジェクト用に以下のもの
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/red</item>
<item name="colorAccent">@color/white</item>
</style>
ライブラリプロジェクトのスタイルは、メインのアプリのスタイルによって上書きされます。スタイルに異なる名前を付けると、マニフェストマージ競合エラーがスローされます。
以下はメインアプリのマニフェストです
<application
Android:name=".MyApp"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
これは図書館用です
<application
Android:allowBackup="true"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme"
>
アプリをビルドした後、gradleはマニフェストファイルを1つにマージするため、ライブラリでテーマをapplication
タグに設定すると、アプリの属性によって上書きされます。
スタイル名を別の名前に変更し、
<style name="MyLibTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/red</item>
<item name="colorAccent">@color/white</item>
</style>
ライブラリ関数でアクティビティを開始する場合は、ライブラリマニフェストファイルでテーマを個別にアクティビティに設定します。ライブラリマニフェストのapplication
タグに設定されたテーマは、プロジェクトビルド後のマージ時に置き換えられるため、個人の活動
<activity Android:name=".MyLibActivity" Android:theme="@style/MyLibTheme">
</activity>
または、アクティビティコードで setTheme を使用できます。
setTheme(R.style.MyLibTheme);
ビルドプロセスで、ユーザー(ライブラリユーザー)が同じテーマ名を使用している場合、メインのapp
モジュールテーマに置き換えられます。その状況を保護するために、ライブラリのgradleファイルでgradleオプションを使用できます。
Android{
// replace mylib_ with name related to your library
resourcePrefix 'mylib_'
}
メインプロジェクトのマニフェストのアプリケーションノードの下でtools:replace="Android:theme"
を使用することをお勧めします。詳細などについては、こちらをご覧ください: https://developer.Android.com/studio/build/manifest-merge