Android動態(tài)切換主題

1、在res/values/styles.xml里定義好主題。
2、在Acticity的setContentView()方法之前調(diào)用 setTheme(R.style.myTheme)方法。
3、利用recreate()方法重建Activity即可。

舉個例子,我們用一個boolean值來控制兩種主題:AppTheme和YellowTheme,由于要重建主題,所以這個boolean需要是static的,或者做持久化處理。當(dāng)然也可以利用ViewModel來存儲這個boolean值。

MainViewModel:

public class MainViewModel extends ViewModel {

    private boolean mYellowTheme = false;

    public void changeThemeTag() {
        mYellowTheme = !mYellowTheme;
    }

    public boolean isYellowTheme() {
        return mYellowTheme;
    }
}

MainActivity:

public class MainActivity extends AppCompatActivity {

    private static final String LOG_TAG = "MainActivityLog";
    private Button mButton;
    private MainViewModel mViewModel;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
        changeTheme();
        setContentView(R.layout.activity_main);

        mButton = findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mViewModel.changeThemeTag();
                recreate();
            }
        });
    }

    private void changeTheme() {
        if (mViewModel.isYellowTheme()) {
            setTheme(R.style.YellowTheme);
        } else {
            setTheme(R.style.AppTheme);
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容