Ответ 1
Убедитесь, что вы вызываете setTheme()
в onCreate()
ПЕРЕД вызовом setContentView()
. Затем, если вы хотите динамически изменить тему еще раз позже, вы должны просто перезапустить свою активность.
Я хочу иметь функцию "изменить тему" в своем приложении. Если я вызываю setTheme() в onCreate(), возникает одна проблема.
В тот момент, когда я запускаю приложение, на секунду появляется простой белый фон (потому что я установил светлую тему в манифесте). После этого отображается полный макет моей активности - либо с белым, либо с черным фоном, в соответствии с предпочтением темы пользователя.
Можно ли каким-либо образом изменить, появится ли белый или черный фон после запуска?
Убедитесь, что вы вызываете setTheme()
в onCreate()
ПЕРЕД вызовом setContentView()
. Затем, если вы хотите динамически изменить тему еще раз позже, вы должны просто перезапустить свою активность.
Если вы добавляете тему во всю программу, чем можете начать с нее:
В манифесте вы добавляете в свой тег приложения, что используете тему.
<application android:theme="@style/mythemename">
Затем посмотрите Тема XML, чтобы убедиться, что у вас есть то, что вам нужно объявить в соответствующих местах.
Если для конкретного действия вы можете добавить тег активности
<activity android:theme="@android:style/Theme.propertyname">
Вы также можете, если хотите, чтобы ваша тема просто меняла цвет фона, следуйте одному и тому же шаблону с тегом активности или приложения (что когда-либо используется) и задайте имя элемента "colorbackground" на то, что вы хотите,
Вы также можете использовать Тема XML и переделать то, что вы хотите в своей текущей теме, и вызвать эту пользовательскую тему, используя метод выше.
Я надеюсь, что это поможет, и если не сообщите мне, чтобы я мог лучше помочь в будущем.
Другим способом будет иметь вид заставки, который будет проверять, например, переменную предпочтения, а затем решить, использовать ли светлую или темную тему. Таким образом, вы также можете использовать XML-макеты.
РЕДАКТИРОВАТЬ: Еще один способ состоит в том, чтобы весь макет определял материал в методе onCreate(), а затем просто запускал метод onStart() при готовности.