Подтвердить что ты не робот

Внедрение функции изменения черных/светлых тем в приложении для Android

Я хочу иметь функцию "изменить тему" ​​в своем приложении. Если я вызываю setTheme() в onCreate(), возникает одна проблема.

В тот момент, когда я запускаю приложение, на секунду появляется простой белый фон (потому что я установил светлую тему в манифесте). После этого отображается полный макет моей активности - либо с белым, либо с черным фоном, в соответствии с предпочтением темы пользователя.

Можно ли каким-либо образом изменить, появится ли белый или черный фон после запуска?

4b9b3361

Ответ 1

Убедитесь, что вы вызываете setTheme() в onCreate() ПЕРЕД вызовом setContentView(). Затем, если вы хотите динамически изменить тему еще раз позже, вы должны просто перезапустить свою активность.

Ответ 2

Если вы добавляете тему во всю программу, чем можете начать с нее:

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

<application android:theme="@style/mythemename">

Затем посмотрите Тема XML, чтобы убедиться, что у вас есть то, что вам нужно объявить в соответствующих местах.

Если для конкретного действия вы можете добавить тег активности

<activity android:theme="@android:style/Theme.propertyname"> 

Вы также можете, если хотите, чтобы ваша тема просто меняла цвет фона, следуйте одному и тому же шаблону с тегом активности или приложения (что когда-либо используется) и задайте имя элемента "colorbackground" на то, что вы хотите,

Вы также можете использовать Тема XML и переделать то, что вы хотите в своей текущей теме, и вызвать эту пользовательскую тему, используя метод выше.

Я надеюсь, что это поможет, и если не сообщите мне, чтобы я мог лучше помочь в будущем.

Ответ 3

Другим способом будет иметь вид заставки, который будет проверять, например, переменную предпочтения, а затем решить, использовать ли светлую или темную тему. Таким образом, вы также можете использовать XML-макеты.

РЕДАКТИРОВАТЬ: Еще один способ состоит в том, чтобы весь макет определял материал в методе onCreate(), а затем просто запускал метод onStart() при готовности.