2015-12-17 69 views
0

這是我的我的應用程序的實際工作style.xml:安卓:更改應用主題動態

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:alertDialogTheme">@style/customDialog</item> 
    <item name="android:actionBarStyle">@style/customActionBar</item> 
</style> 


<style name="LoginStyle" parent="AppTheme.Base"> 
    <item name="colorPrimaryDark">@color/Material_Blue</item> 
    <item name="colorControlNormal">#c5c5c5</item> 
    <item name="colorControlActivated">#FFFFFF</item> 
    <item name="colorControlHighlight">#FFFFFF</item> 
</style> 

<style name="MainStyle" parent="AppTheme.Base"> 
    <item name="android:actionBarTheme">@style/customActionBar</item> 
    <item name="android:colorAccent">@color/md_material_blue_600</item> 
    <item name="colorPrimaryDark">@color/Material_Blue</item> 
    <item name="colorControlNormal">@color/md_material_blue_600</item> 
    <item name="colorControlActivated">@color/md_material_blue_600</item> 
    <item name="colorControlHighlight">@color/md_material_blue_600</item> 
</style> 

<style name="customDialog"> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> 
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> 
    <item name="colorControlActivated">@color/md_material_blue_600</item> 
    <item name="android:colorControlHighlight">@color/md_material_blue_600</item> 
    <item name="android:button">@color/md_material_blue_600</item> 
</style> 

<style name="customActionBar"> 
    <item name="android:background">@color/Material_Blue</item> 
</style> 

正如你看到的,我的應用程序有一些不同的主題,但現在一些用戶問我要實現一個功能,可以將「燈光主題」切換爲「黑暗主題」。現在,如果我將AppTheme.Base的主題父級更改爲Theme.AppCompat,則整個應用程序將獲得「黑暗主題」。

那麼,有沒有辦法改變基本主題的父主題?或者我需要做什麼才能得到我的結果?我已經閱讀了這個:https://stackoverflow.com/a/18301723/5327202,我已經實現了這些類,但它只是將文本顏色更改爲白色而沒有其他內容(當然,我在xml中創建了另一種樣式;本質上,我複製了 - 原版主題,然後更改AppTheme.Base父母爲Theme.AppCompat

謝謝。

回答

1

設置此上下文的基本主題。請注意,這應該在Context中實例化任何視圖之前調用(例如在調用setContentView(View)或者inflate(int,ViewGroup)之前)。

check http://developer.android.com/reference/android/content/Context.html#setTheme%28int%29

public void onCreate(Bundle savedInstanceState) { 
    setTheme(android.R.style.Theme); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 
} 
+0

好了,現在它的工作原理。非常感謝。 – CallMeDeftsu4