Отключить пользовательские настройки, но также предоставить макет, когда они отключены?

Есть ли атрибут XML, чтобы я мог установить внешний вид моего пользовательского предпочтения с помощью атрибута: android:enabled=false?

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

Но с моим пользовательским предпочтением его отключение не изменит его внешний вид, и, таким образом, это смутит пользователя, когда он нажмет на него, и он ничего не сделает.


person poetryrocksalot    schedule 06.08.2020    source источник


Ответы (1)


Создайте рисуемый файл checkbox.xml, состоящий из <selector>, который устанавливает изображение кнопки флажка в зависимости от его состояния:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true"
          android:drawable="@drawable/checkbox_checked" /> <!-- checked -->
    <item android:state_checked="false" 
        android:drawable="@drawable/checkbox_unchecked" /> <!-- default -->
</selector>

Вы даже можете использовать цвета вместо этих рисунков.

В вашем пользовательском предпочтении флажка checkbox_preference.xml с помощью этой выбираемой кнопки добавления флажка. Поместите этот файл в папку макета:

<CheckBox android:id="@+android:id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/checkbox" />

Раздуйте это, используя ваш prefs.xml . Атрибут макета используется для размещения пользовательского макета с пользовательским флажком.

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:title="@string/category_title">
        
    <CheckBoxPreference
    android:key="preferenceKey"
    android:title="@string/preferenceTitle"
    android:defaultValue="false"
    android:layout="@layout/checkbox_preference"
    />
    </PreferenceCategory>
</PreferenceScreen>
person gpl    schedule 06.08.2020