Измените тему деятельности программы

В некоторых случаях мне нужно удалить тему диалога из моей активности, но она не работает. Вот пример

Первая деятельность:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startActivity(new Intent(MainActivity.this, SecondActivity.class)); } 

Вторая активность:

 public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setTheme(android.R.style.Theme); setContentView(R.layout.activity_second); } 

Выдержка из манифеста:

   

Когда я запускаю, это все еще диалоги.

API10

Благодарю.

Как сказано в документе , вы должны вызвать setTheme перед выходом любого представления. Кажется, что super.onCreate() принимает участие в обработке view .

Итак, чтобы динамически переключаться между темами, вам просто нужно вызвать setTheme перед super.onCreate :

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

Ответ пользователя1462299 отлично работает, но если вы включаете fragmentы , они будут использовать оригинальную тему деятельности. Чтобы применить тему ко всем fragmentам, вы также можете переопределить метод getTheme () контекста:

 @Override public Resources.Theme getTheme() { Resources.Theme theme = super.getTheme(); if(useAlternativeTheme){ theme.applyStyle(R.style.AlternativeTheme, true); } // you could also use a switch if you have many themes that could apply return theme; } 

Вам больше не нужно вызывать setTheme () в методе onCreate (). Вы отменяете каждый запрос, чтобы получить текущую тему в этом контексте.

Я знаю, что я опаздываю, но я хотел бы опубликовать решение здесь:
Проверьте полный исходный код здесь .
Это код, который я использовал при изменении темы с помощью настроек.

 SharedPreferences pref = PreferenceManager .getDefaultSharedPreferences(this); String themeName = pref.getString("prefSyncFrequency3", "Theme1"); if (themeName.equals("Africa")) { setTheme(R.style.AppTheme); } else if (themeName.equals("Colorful Beach")) { //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show(); setTheme(R.style.beach); } else if (themeName.equals("Abstract")) { //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show(); setTheme(R.style.abstract2); } else if (themeName.equals("Default")) { setTheme(R.style.defaulttheme); } 

Обратите внимание, что вам нужно поставить код перед настройкой setcontentview.

СЧАСТЛИВЫЙ КОДИРОВАНИЕ!

  • Определение пользовательских атрибутов
  • Android, ListView IllegalStateException: «Содержимое адаптера изменилось, но ListView не получил уведомление»
  • Как разбить стилизованный текст на страницы в Android?
  • Программировать блокировку в портретном режиме для определенных операций
  • Javadoc в Eclipse не распознает пакеты
  • Android: wrap_content не работает с ListView
  • Создание пользовательских больших уведомлений
  • CalledFromWrongThreadException
  • Как получить имя пакета из любого места?
  • Как отображать одноразовый экран приветствия?
  • Как resize виджета коммутатора
  • Давайте будем гением компьютера.