Доступ к элементу в стиле из файла Xml

Цвет фона сохраняется в базе данных в соответствии с предпочтениями пользователя. Приложение будет открываться в соответствии с выбранным цветом фона при каждом открытии. Я выяснил, что лучше всего это делать по темам. В приложении будет две темы. Файл 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)' не найден.

Но этот код не работает. Что я должен делать?

Попробуйте использовать R.style.DarkTheme вместо android.R.style.DarkTheme

sanoJ 17.07.2019 17:56

@sanoJ Настоящая проблема в том, что я не могу получить к нему доступ из activity_main.xml.

x-27 17.07.2019 18:00
0
2
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно иметь файл attrs.xml в вашем каталоге values. Добавьте атрибут selectedBackgroundColor к этому файлу, как показано ниже.

<?xml version = "1.0" encoding = "utf-8"?>
<resources>
    <declare-styleable name = "customAttr">
        <attr name = "selectedBackgroundColor" format = "color"/>
    </declare-styleable>
</resources>

Другие вопросы по теме