it-swarm.com.ru

Как установить тему для активности во время выполнения? Не работает вызов setTheme перед onCreate и setContentView

Я хочу, чтобы setTheme для активности во время выполнения, у меня есть поиск некоторых решений с помощью google . Кто-то сказал, что вызов setTheme прежде, чем onCreate и setContentView могут работать, раздел кода, как

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

но это не работает, я хочу знать, есть ли другое решение может активировать тему?

15
herman brain

Просто попробуйте это - установите вашу тему после super.onCreate(savedInstanceState); и перед setContentView(...)

Как ниже код -

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

На самом деле это работало только для меня, если я установил его перед вызовом 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...
}
6
Chris.Jenkins
setContentView(...);
setTheme(R.style.MyTheme);
setContentView(...);

Это должно работать хорошо ..

Подробнее о темах читайте здесь http://entertheinfinity.blogspot.in/2016/06/designing-Android-interface-themes.html

3
Umesh

Чтобы установить тему во время выполнения и устранить проблему с «черным фоном»:

  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>
      
0
Eric