24

我想setTheme在运行时进行活动,我已经通过谷歌搜索了一些解决方案。有人说setTheme在 onCreate 和 setContentView 可以工作之前调用,代码部分就像

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme_Translucent_NoTitleBar);
    super.onCreate(savedInstanceState);
    ...
    setContentView(...)
}

但它不起作用,我想知道,是否有另一种解决方案可以将主题设置为活动?

4

4 回答 4

21

super.onCreate(savedInstanceState);试试这个 - 在前后设置你的主题setContentView(...)

就像下面的代码 -

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setTheme(android.R.style.Theme_Translucent_NoTitleBar); // Set here
    setContentView(...)
}
于 2012-06-28T05:26:18.973 回答
8

实际上,如果我在调用之前设置它,这只对我有用super.onCreate(savedInstanceState);

public void onCreate(Bundle savedInstanceState)
{
    final int themeRes = getIntent().getIntExtra(EXTRA_THEME_ID, 0);
    if (themeRes != 0) setTheme(themeRes);
    super.onCreate(savedInstanceState);
    //ect...
}
于 2013-02-02T18:28:24.047 回答
4
setContentView(...);
setTheme(R.style.MyTheme);
setContentView(...);

一定很好用。。

有关主题的更多信息,请阅读此 http://entertheinfinity.blogspot.in/2016/06/designing-android-interface-themes.html

于 2016-06-27T07:42:28.513 回答
2

在运行时设置主题并修复“黑色背景”问题:

  1. 主题应该设置在之前onCreate()

    public void onCreate(Bundle savedInstanceState) {
        setTheme(android.R.style.Theme_Translucent_NoTitleBar);
        super.onCreate(savedInstanceState);
        ...
        setContentView(...)
    }
    
  2. android 清单中透明活动的主题应设置为具有透明背景的任何主题(例如对话框主题)。

    • 这告诉 Android 操作系统继续在透明活动后面绘制活动,这样您就不会以黑色背景结束。

    • 我正在使用AppCompatActivity; 我需要使用一个AppCompat主题:

      <?xml version="1.0" encoding="utf-8"?>
      <manifest
          xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.app">
          ...
          <application
              ...>
              ...
              <activity
                  android:name=".TranslucentActivity"
                  android:theme="@style/Theme.AppCompat.DayNight.Dialog"
                  .../>
              ...
          </application>
      </manifest>
      
于 2018-08-21T14:44:53.747 回答