如何在java中设置android app主题,

时间:2014-01-22 20:05:40

标签: java android android-theme

我想让用户通过点击按钮来改变整个应用中的主题 所以我想知道在java代码中是否有办法更改应用主题

2 个答案:

答案 0 :(得分:3)

您可以在上下文中使用setTheme()方法。

请务必注意文档中的注释 - 在实例化任何视图之前需要调用setTheme()

如果您在应用程序打开时更改主题,则需要重新创建活动以显示更改。

答案 1 :(得分:1)

public class ThemeSwitcher extends Activity implements OnClickListener {
    private boolean isThemeSwitch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (isDefault() == false) {// Default theme defined in Style file.
            setTheme(android.R.style.Theme_Light);
        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theme_switcher);
        findViewById(R.id.switchTheme).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v.getId() == R.id.switchTheme) {
            switchTheme();
            isThemeSwitch = true;
            finish();
        }
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        if (isThemeSwitch) {
            Intent intent = new Intent(this, ThemeSwitcher.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }

    }

    private SharedPreferences getPreference() {
        return getSharedPreferences("theme", 0);
    }

    private void switchTheme() {
        if (isDefault()) {
            getPreference().edit().putBoolean("theme", false).commit();
        }
        else {
            getPreference().edit().putBoolean("theme", true).commit();
        }
    }

    private boolean isDefault() {
        boolean isDef = true;
        isDef = getPreference().getBoolean("theme", false);
        return isDef;
    }
}