web-dev-qa-db-ja.com

android)でライブラリプロジェクトに別のテーマを設定します

ライブラリプロジェクトで構成される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"
  >
11
arjun

アプリをビルドした後、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_'
}
12

メインプロジェクトのマニフェストのアプリケーションノードの下でtools:replace="Android:theme"を使用することをお勧めします。詳細などについては、こちらをご覧ください: https://developer.Android.com/studio/build/manifest-merge

1
salbury