Я хочу сделать ночную тему в своём приложении, которая активируется при нажатии на кнопку. При этом activity не должна пересоздаваться (важно). При ночной теме, к примеру, меняется цвет кнопок, фона и т.д
При этом activity не должна пересоздаваться (важно)
Хорошо подумайте, так ли это важно, потому что для смены темы без пересоздания активити прийдется писать много кода.
Подробности по ссылке: https://dimlix.com/switch-theme-android/
Здравствуйте, данную статью читал. Проблема в том, что там цвета вытаскиваются из атрибутов темы, но на деле мне может понадобится больше цветов, чем имеется атрибутов типа android:colorPrimaryDark, да и, порой, такие атрибуты нужны для других целей
LuVairo, Вы всегда можете добавить столько атрибутов, сколько вам потребуется.
В папке values у вас лежит файл colors.xml с цветами для дневной схемы. Имена этих цветов вы задаете сами.
В папку values-night вы кладете такой же файл colors.xml с такими же именами цветов, но с "ночными" значениями.
Сергей Водаков, это я понимаю. В статье, которую вы упомянули, реализация ночной темы идёт посредством того, что мы через код "говорим" activity, чтобы она ставила свойство bacgrkound по цвету ColorPrimaryDark. Данный цвет является атрибутом темы, а задаётся при помощи colors.xml. То есть мы можем получить его только обращением к атрибутам самой темы, а не цветам из colors.xml. Или можно как-то задать для каждой темы свой файл colors.xml. Извините, если туплю, но я совсем запутался
Все атрибуты цветов уже использованы, а мне нужно также определённый цвет, скажем, для кнопки.
Вот код реализации перехода на ночную тему (тут только вытаскиваю windowbackground и меняю его на чёрный.
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (state) {
state = false;
fab.setBackgroundResource(R.drawable.ic_wb_sunny_black_24dp);
setTheme(R.style.DarkAppTheme);
} else {
state = true;
fab.setBackgroundResource(R.drawable.ic_wb_sunny_black_24dp);
setTheme(R.style.LightAppTheme);
}
TypedValue typedValue = new TypedValue();
Resources.Theme theme = getTheme();
theme.resolveAttribute(
android.R.attr.windowBackground, typedValue,
true
);
getWindow().getDecorView().setBackgroundColor(typedValue.data);
}
});
}
Вот основная строчка, где вытаскивается атрибут темы
Сергей Водаков, элементу нельзя назначить тему, только стиль. Кстати, вы не знаете почему в моём коде не работает fab.setBackgroundResource(R.drawable.ic_wb_sunny_black_24dp);. Или я неправильно понимаю работу данного метода? Причём я пытался с layout то же самое провернуть, но также ничего не происходит