3

在一個由項目庫組成的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" 
    > 
+0

在你的圖書館你有一些活動? –

+0

圖書館項目將有其自己的清單。在那裏應用圖書館的圖書館。 – Wizard

+0

是的我在庫項目中有一些活動,主題應用 – arjun

回答

3

構建您的應用程序,gradle這個將你的清單文件合併成一個之後,所以設置主題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> 

如果你在你的庫函數開始一些活動,然後設置主題活動,分別在庫清單file.Theme上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_' 
} 
+0

我試過這個,但是當我將它設置爲庫項目中的活動 – arjun

+0

時@arjun'setTheme'不工作? –

+0

您將需要爲特定活動設置主題,而不是在您的庫的Android清單中設置的「應用程序」主題中,它不會像我之前說的那樣起作用 –