Измените тему деятельности программы
В некоторых случаях мне нужно удалить тему диалога из моей активности, но она не работает. Вот пример
Первая деятельность:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startActivity(new Intent(MainActivity.this, SecondActivity.class)); }
Вторая активность:
- Android Volley ImageLoader - параметр BitmapLruCache?
- FirebaseInstanceIdService устарел
- Файл APK Repackage для хранения настраиваемых активов - какой инструмент построения использовать?
- Преобразование изображения в PDF в Android
- Ошибка 12501 аутентификация с помощью входа в google
public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setTheme(android.R.style.Theme); setContentView(R.layout.activity_second); }
Выдержка из манифеста:
Когда я запускаю, это все еще диалоги.
API10
Благодарю.
- Установите фон блокировки экрана в Android (например, Spotify do)
- textview.getLineCount всегда 0 в android
- LinearLayout height in onCreate - 0
- Просмотр списка привязки к элементу
- Почему мое приложение в списке приложений не открывает файл txt?
- java.lang.numberformatexception: недействительный double: ""
- Установка значения свойства Singleton в Firebase Listener
- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE при использовании общего идентификатора пользователя
Как сказано в документе , вы должны вызвать 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.
СЧАСТЛИВЫЙ КОДИРОВАНИЕ!