一般来说主题都是在manifest里设置的,那有没有办法在代码里设置呢?代码在ChangeTheme内
在activity创建前动态设置主题
比如我现在有activity A1,A2,B,A1可以进入B,A2也可以进入B,A1进入B,此时B想用红色主题,A2进入B,此时B想用绿色主题。how to?
用setTheme,注意这个方法必须写在setContentView之前(感谢@澎湃滴范贰激情 指正)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Random random = new Random();
boolean b = random.nextBoolean();
setTheme(b ? R.style.AppThemeRed : R.style.AppThemeGreen);
setContentView(R.layout.activity_main);
在activity创建后动态设置主题
其实设置主题必须在任何view创建之前,所以我们不可能在activity的onCreate之后来更改主题,如果一定要做,就只能调用setTheme(),然后调用recreate(),重新创建一个activity,并且销毁上一个activity,代码如下
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setRandomTheme();
recreate();
}
});
参考文献
http://stackoverflow.com/questions/2482848/how-to-change-current-theme-at-runtime-in-android