Цвет фона сохраняется в базе данных в соответствии с предпочтениями пользователя. Приложение будет открываться в соответствии с выбранным цветом фона при каждом открытии. Я выяснил, что лучше всего это делать по темам. В приложении будет две темы. Файл Styles.xml.
<resources>
<style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">
<item name = "selectedBackgroundColor">#fff</item>
</style>
<!-- Base application theme. -->
<style name = "DarkTheme" parent = "Theme.AppCompat.Light.NoActionBar">
<item name = "selectedBackgroundColor">#000</item>
</style>
</resources>
в .java:
public void onCreate(Bundle savedInstanceState) {
if ( isUserSelectedBackground == true ) {
setTheme(R.style.DarkTheme);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
в файле activity_main.xml
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:id = "@+id/viewMain"
android:background = "?attr/selectedBackgroundColor"
android:layout_width = "match_parent"
android:layout_height = "match_parent">
</RelativeLayout>
Ошибка: ошибка: атрибут стиля 'attr/selectedBackgroundColor (он же com.myapp:attr/selectedBackgroundColor)' не найден.
Но этот код не работает. Что я должен делать?
@sanoJ Настоящая проблема в том, что я не могу получить к нему доступ из activity_main.xml.
Вам нужно иметь файл attrs.xml
в вашем каталоге values
. Добавьте атрибут selectedBackgroundColor
к этому файлу, как показано ниже.
<?xml version = "1.0" encoding = "utf-8"?>
<resources>
<declare-styleable name = "customAttr">
<attr name = "selectedBackgroundColor" format = "color"/>
</declare-styleable>
</resources>
Попробуйте использовать
R.style.DarkTheme
вместоandroid.R.style.DarkTheme