为什么在Activity中使用getApplicationContext().setTheme()不起作用?

13

我目前在尝试在活动中调用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个回答

11

我以前也遇到过这个问题,但没找到解决方法。只有上帝知道为什么,但我甚至看到过Android框架工程师(我相信是Dianne Hackborn)说不建议像这样设置主题。

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


11

在调用setContentView(...)super.oncreate()之前,您可以使用setTheme(..),这样应该就可以正常工作了。


7
我在setContentView和super.onCreate之前调用了call,但仍然无效。 - Sani Elfishawy

2

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


谢谢您的答复,我确实在实例化任何视图之前调用了该方法,但仍然无法工作。 - user221778
在我把setTheme移到setContentView之前,它对我起作用了。 - OldSchool4664

-1
你可以在调用setContentView(...)super.oncreate()之前使用setTheme(..),这样应该就可以正常工作了。
在SDK 4.0中(可能更早)已经修复了这个问题。

-2

我自己没有尝试过这个,但如果有必要以编程方式设置主题,下一步我会尝试从Application派生一个类,并像以下代码一样重写onCreate方法:

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

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接