【问题标题】:How to setTheme to an activity at runtime? It doesn't work call setTheme before onCreate and setContentView如何在运行时将主题设置为活动?在 onCreate 和 setContentView 之前调用 setTheme 不起作用
【发布时间】:2018-08-21 22:44:53
【问题描述】:

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

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

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

【问题讨论】:

  • 试试这个 - 在super.onCreate(savedInstanceState); 之后和setContentView(...) 之前设置你的主题
  • @hermanbrain :除非您打算修改您传递给它的Bundle,否则请始终在您的onCreate(...) 方法中首先调用super.onCreate(...)。正如 SpK 所说,在致电 super.onCreate(...) 后致电 setTheme(...)。
  • 同样的问题,我什至尝试按照 praveen 所说的那样放置它,但没有成功。我在 style.xml 中创建了一个自定义主题并添加了 setTheme(R.style.MyCustomTheme);我还需要做什么吗?

标签: android themes


【解决方案1】:

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

如下代码-

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

【讨论】:

  • 我试过这个,但它显示黑色背景,你能帮帮我吗。
  • @mdDroid Dis 你找到解决黑色背景的方法
【解决方案2】:

实际上,如果我在调用 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...
}

【讨论】:

    【解决方案3】:
    setContentView(...);
    setTheme(R.style.MyTheme);
    setContentView(...);
    

    它必须运行良好..

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

    【讨论】:

    • 我使用这种技术来更改应用程序启动活动的主题。这是因为在 onCreate 中没有可以设置主题的视图(即没有加载操作栏或活动中的任何视图)。在 setContentView() 之前设置主题就像将主题设置为空视图。我的比喻。始终由您决定。谢谢
    【解决方案4】:

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

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

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

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

      • 我正在使用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>
        

    【讨论】:

    • 谢谢,当您的第三个模块动态设置主题并且app 模块使用Material Theme 时,在AndroidManifest 中设置主题有效。
    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2017-08-20
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多