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);
}
}
}