activity动态设置主题

一般来说主题都是在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

你可能感兴趣的:(activity动态设置主题)