Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 18.09.2018
Сообщений: 132

Я пытаюсь добавить темную тему в своем приложении, но это работает только на одном экране

22.02.2020, 20:26. Показов 2713. Ответов 10

Студворк — интернет-сервис помощи студентам
Я пытаюсь добавить темную тему в своем приложении, но это работает только на одном экране, а хочется, чтобы на одном экране включалась темная тема, а на все остальных это применялось. Подскажите, как это можно сделать я просто не представляю как.


XML
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
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/backgroundcolor"
 
    tools:context=".ActivitySettings">
 
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <Switch
        android:id="@+id/myswitch"
        android:layout_width="339dp"
        android:layout_height="23dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="Switch"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.523"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
        app:layout_constraintVertical_bias="0.0" />
 
 
</android.support.constraint.ConstraintLayout>
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
public class ActivitySettings extends AppCompatActivity {
 
    public Switch myswitch;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        if(AppCompatDelegate.getDefaultNightMode()==AppCompatDelegate.MODE_NIGHT_YES)
        {
            setTheme(R.style.darktheme);
        }
        else
            setTheme(R.style.AppTheme);
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
 
 
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        myswitch=(Switch) findViewById(R.id.myswitch);
        /*ActionBar actionBar =getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);*/
        // Sets the Toolbar to act as the ActionBar for this ActivitySettings window.
        // Make sure the toolbar exists in the activity and is not null
        setSupportActionBar(toolbar);
        if(AppCompatDelegate.getDefaultNightMode()==AppCompatDelegate.MODE_NIGHT_YES)
        {
            myswitch.setChecked(true);
        }
        myswitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    restartApp();
                }
                else {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    restartApp();
                }
            }
        });
 
        SharedPreferences prefs = getSharedPreferences("test", Context.MODE_PRIVATE);
        boolean switchState = prefs.getBoolean("switchState", true);
 
        myswitch.setChecked(switchState);
    }
 
    private void restartApp() {
        Intent i = new Intent(getApplicationContext(), ActivitySettings.class);
        startActivity(i);
        finish();
    }
 
    protected void onPause() {
        super.onPause();
 
        // пишем нужное в SharedPreferences
        SharedPreferences.Editor ed = getSharedPreferences("test", Context.MODE_PRIVATE).edit();
        ed.putBoolean("switchState", myswitch.isChecked());
        ed.commit();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
 
            case R.id.miCompose:
                startActivity(new Intent(getApplicationContext(), MainActivity.class));
                Toast.makeText(
                        getApplicationContext(),
                        "You clicked the compose button.",
                        Toast.LENGTH_SHORT)
                        .show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2020, 20:26
Ответы с готовыми решениями:

Подключить тёмную тему
Как подключить тёмную тему (по умолчанию - светлая)

Возможно ли в Visual C++ 2010 Express поменять светлую тему на темную?
Подскажите пожалуйста возможно ли в Visual C++2010 экспрес выпуск поменять светлую тему на темную .И если возможно то как это сделать....

Программно нажать на кнопку в своем приложении - PerformClick не работает
мне надо программно нажать на кнопку в своем приложении, PerformClick упорно отказывается работать O_o

10
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
22.02.2020, 21:16
Spok-, У вас весь код неверный, в интернете куча примеров реализации DayNight темы.
Вот это вообще лишнее:
Java
1
2
3
4
5
6
     if(AppCompatDelegate.getDefaultNightMode()==AppCompatDelegate.MODE_NIGHT_YES)
        {
            setTheme(R.style.darktheme);
        }
        else
            setTheme(R.style.AppTheme);
Тема у вас одна должна быть. Создаются папки для ресурсов темной темы values-night. В общем тема это обширная.
Тут есть пример, как это должно выглядеть:
https://github.com/material-co... me-builder
0
1 / 1 / 0
Регистрация: 18.09.2018
Сообщений: 132
22.02.2020, 21:34  [ТС]
Так это можно сказать и есть пример из интернета. Но это для одной активности, а мне хочется распространить это на все активности проекта. Вот допустим в одной из активностей я включаю и во всех так же это включается.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
22.02.2020, 21:46
Цитата Сообщение от Spok- Посмотреть сообщение
есть пример из интернета
Значит не верный пример. И тема включается для активити. Если у вас их много (что то же неправильно), то вы при старте каждого должны проверять какой режим включен, или устанавливать тему для всего приложения, в классе унаследованном от Application
0
1 / 1 / 0
Регистрация: 18.09.2018
Сообщений: 132
22.02.2020, 21:47  [ТС]
Удалив эти строки смена стиля переспала работать.
Java
1
2
3
4
5
6
if(AppCompatDelegate.getDefaultNightMode()==AppCompatDelegate.MODE_NIGHT_YES)
        {
            setTheme(R.style.darktheme);
        }
        else
            setTheme(R.style.AppTheme);
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
22.02.2020, 21:51
Цитата Сообщение от Spok- Посмотреть сообщение
Удалив эти строки
Я вам дал ссылку на демо приложение от разработчика, там смотрите, как это нужно реализовывать, а удалять строки наугад нет смысла.
0
1 / 1 / 0
Регистрация: 18.09.2018
Сообщений: 132
22.02.2020, 22:03  [ТС]
Вы заявили, что это лишнее, я решил это проверить вот и все.

Добавлено через 1 минуту
Вы не можете подсказать, как этот проект запустить? Скачав его я не могу его запустить.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
22.02.2020, 22:05
Spok-, Я вам говорю, что реализация у вас неверная, для DayNight темы, строки AppCompatDelegate.setDefaultNightMode достаточно. Так устанавливается режим темной темы.
0
1 / 1 / 0
Регистрация: 18.09.2018
Сообщений: 132
22.02.2020, 22:09  [ТС]
Мммм хорошо. А вы не знаете, как мне распространить темную тему на все активности приложения? Я сейчас нажимаю на switch и стиль меняется.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
22.02.2020, 22:18
Цитата Сообщение от Spok- Посмотреть сообщение
темную тему на все активности приложения?
Я вам писал уже. В Application классе
Java
1
2
AppCompatDelegate.setDefaultNightMode(
            AppCompatDelegate.MODE_NIGHT_YES);
0
1 / 1 / 0
Регистрация: 18.09.2018
Сообщений: 132
23.02.2020, 13:16  [ТС]
Хорошо, но я не могу понять, как мне сделать так, чтобы она включалась по нажатию кнопки или свича. Вот допустим я на одной активности нажимаю на кнопку или свич и у меня на всех других активностях включается ночной режим. Я вот как это сделать не представляю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2020, 13:16
Помогаю со студенческими работами здесь

Без интернета не работает распознавание речи в своем приложении
Android 4.1.2. Без интернета не работает распознавание речи в своем приложении, хотя есть оффлайн-пакет и со стандартной клавиатуры...

Как открыть форму только в одном приложении
Приветсвую, собсна вопрос в заголовке. Пример: 1) Запустили одну форму, потом другую, обе друг от друга не зависят(можно запускать...

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

Почему Timer в одном приложении работает медленнее, чем в другом?
Привет. Есть сервер и клиент, на сервере работает таймер, каждый 50 миллисекунд он увеличивает значение переменной на 1. Когда запускается...

Программа работает в режиме дебага, но зацикливается, как только пытаюсь запустить
Пробовал на онлайн-компиляторе - то же самое. А если запустить с дебагом, т.е. с брейкпоинтами и т.д., то оно прекрасно работает. ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru