С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205

Day night тема подскажите как применять?

19.06.2017, 16:13. Показов 2082. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, не пинайте ногами за глупый вопрос.
Есть NAvigation drawer с фрагментами и несколькими активити.
В MyPreferenceActivity сделал PreferenceFragment там разместил настройки.

в общем по нажатию смены темы - тема меняется только после перезапуска программы.
Ну а нужно конечно же сразу что бы менялась.

вот кнопка :
XML
1
2
3
4
5
6
7
8
<ListPreference
            android:defaultValue="1"
            android:entries="@array/theme"
            android:entryValues="@array/theme_entries"
            android:icon="@drawable/ic_add_business"
            android:key="@string/list_theme"
            android:summary="Светлая или темная"
            android:title="Тема приложения" />

вот так вызываю в DrawerActivity. Вынес отдельно в метод.

Java
1
2
3
4
5
on Create 
 
 prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
 
        setDefaultNightMode ();
ну и сам метод

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void setDefaultNightMode() {
 
        String regular = prefs.getString(getString(R.string.list_theme), "1");
 
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
 
        if (regular.contains("2")){
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            
 
        }else
        if (regular.contains("3"))
        {AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
 
        }
    }
Подскажите с кодом или где почитать. Спасибо.

Добавлено через 4 часа 37 минут
Немного покопался и переделал таким образом:
перенес всю логику во фрагмент настроек

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
changeTheme = (ListPreference)findPreference(getString(R.string.list_theme));
        changeTheme.setKey(getString(R.string.list_theme));
        changeTheme.setEntries(R.array.theme);
        changeTheme.setEntryValues(R.array.theme_entries);
        changeTheme.setDefaultValue("1");
 
        changeTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object defaultValue) {
 
                int index = changeTheme.findIndexOfValue(defaultValue.toString());
 
                if (index == 0) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
 
                }
                else if (index == 1) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
 
 
                } else if (index == 2) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
                    
                }else {
 
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                }
                
                return true;
            }
 
        });
Остается вопрос - насколько это правильно
И как применять тему на лету.
метод getActivity().recreate() при выборе фрагмент пересоздает но тема не меняется... меняется только при выходе из активити настроек. Буду благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2017, 16:13
Ответы с готовыми решениями:

Тема Файлы, подскажите пожалуйста как решить
1. type rad = file of integer; Описать процедуру p(f,g) от двух файлов типа rаd, которая из файла f переписывает в пустой файл g сначала...

Тема Подскажите как сделать так чтобы данные поля со списком брались из запроса, но если он пустой то из таблицы .
Данные в форме берутся из запросов, поле подрядчик имеет всего три значения (заданы в свойствах 1,2,3) в зависимости от выбранного значения...

EJB: когда применять и не применять
Когда правильно вводить EJB компоненты? Все-таки их использование связано с определенными затратами на конфигурирование и всю эту возню. А...

2
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
24.06.2017, 21:33  [ТС]
И все таки помогите победить.

Короче делаю вот так:

В MyPreferenceFragment в методе

меняю тему вот так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals(NIGHT_MODE)) {
            preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
            String nightMode = preferences.getString(NIGHT_MODE, Disable);
            switch (nightMode) {
                case Disable:
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    break;
                case Enable:
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    break;
            }
            Toast.makeText(getActivity(), "Тема изменена", Toast.LENGTH_SHORT).show();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getActivity().finishAfterTransition();
            }
            startActivity(new Intent(getActivity(), Drawer_main.class));
        }
    }
Тема меняется и работает. Но если приложение убить, то при восстановлении тема сбрасывается на дефолт

Java
1
2
3
4
5
public class App extends Application {
    static {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
    }
}
Хотя переключатель остается в нужном положении.

Вопрос как восттанавливать настройки что бы тема при создании оставалась корректной. Спасибо за помощь.
0
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
06.08.2017, 19:20  [ТС]
И все таки не могу допереть почему то смешиваются цвета.
Объясните кто нибудь доходчиво.

Суть проблемы - упрощаю задачу - ставлю по умолчанию тему - ночь.
Есть NavigationDrawer в нем 9 фрагментов.
При создании тема включается без вопросов.
НО
Если переключаю после старта сразу на 9 - (там webView) - а потом на первый фрагмент - цвета как бы перемешиваются.
То есть берется половина день - половина - ночь.
Не могу допереть в чем ошибка.
Причем все активити обрабатываются корректно в плане цвета - смешивается только главные цвета на дровере

Значит вот код:

Сама тема

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Основная тема приложения. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
 
 
 
    <style name="AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="autoCompleteTextViewStyle">@style/cursorColor</item>
    </style>
 
    <!-- цвет курсора в поиске-->
 
    <style name="PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
        <item name="autoCompleteTextViewStyle">@style/cursorColor</item>
    </style>
 
    <!-- тема для заставки -->
    <style name="FullscreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:windowBackground">@null</item>
        <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
        <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    </style>
потом Активити:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    int mCurTheme;
 
    static {
        AppCompatDelegate.setDefaultNightMode(
                AppCompatDelegate.MODE_NIGHT_YES);
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
    
 
        setContentView(R.layout.drawer_main);
        toolbarDrawer = (Toolbar) findViewById(R.id.toolbarDrawer);
        setSupportActionBar(toolbarDrawer);
        toolbarDrawer.setCollapsible(true);
        initDrawer(toolbarDrawer);//выносим тулбар в отдельный метож
        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        navigationView = (NavigationView) findViewById(R.id.nav_view);
 
       headerButtonDayNight();//кнопка смены темы
        navigationView.setNavigationItemSelectedListener(this);
 
        firstStartCheck();
        if (savedInstanceState == null) {
 
 // Set the local night mode to some value
            getDelegate().setLocalNightMode(
                    AppCompatDelegate.MODE_NIGHT_YES);
            // Now recreate for it to take effect
            recreate();
 
            Fragment fragment = null;
            Class fragmentClass;
            fragmentClass = Fragment_taxi_0.class;
            try {
                fragment = (Fragment) fragmentClass.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager
                    .beginTransaction()
                    .replace(R.id.container22, fragment)
                    .commit();
        }
 
 
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2017, 19:20
Помогаю со студенческими работами здесь

Как в форме tip of the day добавить советы?
помагите как в форме tip of the day добавить советы?

Подскажите что это за тема
Приветствую! Есть сайт (www.upet66.ru), нужно создать копию, подскажите кто знает - как называется тема (если можно ссылку). Заранее...

Тема для сайта. Подскажите.
Подскажите тему для сайта. Как бы для &quot;тупых&quot; Т.е. тематику где процент пользователей который будет &quot;жмякать&quot; на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru