为什么活动中的getApplicationContext()。setTheme()不起作用?

时间:2009-12-01 03:01:54

标签: android themes

我目前很难在活动中调用getApplicationContext().setTheme(),我只想在应用程序范围内应用主题资源而不是代码样式中的活动范围,但问题是这不是工作,任何人都可以解释。

非常感谢。!

他是代码骨架:

public class StartUp extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    /*
     * setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen);
     * //that works!
     */
       this.getApplicationContext().setTheme(
            android.R.style.Theme_Black_NoTitleBar_Fullscreen);
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
    }
}

5 个答案:

答案 0 :(得分:12)

您可以在致电setTheme(..)setContentView(...)之前使用super.oncreate(),它应该可以正常使用

答案 1 :(得分:11)

之前我遇到过同样的问题,但没有办法解决这个问题。只有上帝知道为什么,但我甚至看到Android框架工程师(我相信是Dianne Hackborn)说不鼓励设置这样的主题。

在Manifest中为您的Activity设置主题,它将起作用。

答案 2 :(得分:2)

您何时在应用程序上下文中调用setTheme()?必须在实例化任何视图之前调用它。

答案 3 :(得分:0)

  

您可以在致电setTheme(..)之前使用setContentView(...)   super.oncreate()它应该可以正常工作

它已在sdk 4.0中修复(可能更早)。

答案 4 :(得分:-2)

我自己并没有尝试过,但如果绝对有必要以编程方式设置主题,那么接下来我要尝试的是从Application派生一个类并覆盖onCreate方法,如下所示: / p>

public class MyApplication extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen);

    }
}