Android:在java中更改应用程序主题

时间:2014-10-05 16:17:40

标签: java android themes

我正在尝试构建一个multiTheme应用程序。 我想在java代码中设置整个应用程序的主题。它可以在Manifest文件中以这种方式设置:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/myTheme" >

我将所选主题ID存储在SharedPreferences中。 我在我的启动器活动中尝试了以下代码:

getApplicationContext().setTheme(R.style.mainTheme2); 
setContentView(R.layout.activity_action_selection);

/////////////////////////////////////////////// ////////////////////

getApplication().setTheme(R.style.mainTheme2);
setContentView(R.layout.activity_action_selection)  ;

/////////////////////////////////////////////// /////////////////////

setTheme(R.style.mainTheme2);
setContentView(R.layout.activity_action_selection)  ;

最后一个代码更改了活动主题,但没有更改应用程序主题! 别人什么都不改变!

如何更改java代码中的应用程序主题?!

1 个答案:

答案 0 :(得分:0)

当主题发生变化时,您存储的内容可能与此类似:

SharedPreferences prefs = getSharedPreferences("theme", Context.MODE_PRIVATE);
prefs.edit().putInt("resId", R.style.Theme_AppCompat).commit();

当您在SharedPreferences中存储当前选定的主题ID时,您唯一需要做的就是阅读您希望尊重此主题的任何onCreate的{​​{1}}中的值:

Activity

如果您想立即将主题应用于当前活动,请在对public class ThemedActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { // read current custom theme from preferences SharedPreferences prefs = getSharedPreferences("theme", Context.MODE_PRIVATE); int resId = prefs.getInt("resId", R.style.Theme_AppCompat_Light); setTheme(resId); // business as usual super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); } } 进行更改后重新启动它:

SharedPreferences