我正在尝试构建一个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代码中的应用程序主题?!
答案 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