android - 在 Android 应用中更改主题

标签 android android-sharedpreferences

<分区>

我想用按钮动态改变我的应用程序的主题,所以我实现了这个:

 sharedPreferences = getSharedPreferences("VALUES",MODE_PRIVATE);
    int theme = sharedPreferences.getInt("THEME",2);

    switch (theme){
        case 1: setTheme(R.style.AppTheme);
            break;
        case 2: setTheme(R.style.AppTheme_AppBarOverlay);
            break;
    }

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tutotial);

这是按钮的代码:

        tb1 =(Button) findViewById(R.id.button2);

    tb1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            sharedPreferences.edit().putInt("THEME",1).apply();
            Intent intent = new Intent(tutotial.this, tutotial.class);
            startActivity(intent);
        }
    });

tb2 =(Button) findViewById(R.id.button3);

    tb2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sharedPreferences.edit().putInt("THEME",2).apply();
            Intent intent = new Intent(tutotial.this, tutotial.class);
            startActivity(intent);
            Intent intent1 = new Intent(tutotial.this, MainActivity.class);
            startActivity(intent1);

        }
    });

问题是代码只是更改了相关 Activity 的主题,并没有在所有应用程序中更改主题。

最佳答案

有一个open source podcast player called AntennaPod on github .它包含执行此操作的示例代码。

他们的做法是在每个 Activity.onCreate() 方法的开头调用 ContextThemeWrapper.setTheme(int)

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(UserPreferences.getTheme());
    super.onCreate(savedInstanceState);
    ......
}

这可以在每个 Activity 中完成,或者通过创建一个基础 Activity 在每个子类上为您完成。


仔细阅读您的问题后,这正是您在做的事情。所以我会说你走在正确的轨道上。


这似乎也被问过:

都提供相同的解决方案。

关于android - 在 Android 应用中更改主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33585422/

相关文章:

java - 对不适用于 Lollipop 的应用程序中的所有文本使用自定义字体

android - 这是在 android 的本地内存中存储自定义数组列表的更好方法

java - getSharedPrefernces 仅在一个 Activity 中返回 null,而该 Activity 在另一个 Activity 中运行良好

android - 无法清除共享首选项

Android 偏好 - 在 SettingsActivity 中滚动到屏幕外时 SwtichPrefrence 发生变化

android - 带有 Textwatcher android 的 AutoCompleteTextview

java - AlarmManager 从不在 AlarmReceiver/BroadcastReceiver 中调用 onReceive

用于 ViewPager 问题的 android 位图缓存

android - 多重索引后的 NoClassDefFoundError

java - SharedPreferences 没有更新其值