Вы можете создать пользовательский Preference
, который простирается от CheckBoxPreference
и использовать его так же, как CheckBoxPreference
:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<your.package.name.CustomCheckBoxPreference
android:layout="@layout/custom_checkbox_preference"
android:key="custom_checkbox_pref"
android:title="CustomCheckBoxPreferenceTitle"
android:defaultValue="false"/>
</PreferenceScreen>
Обратите внимание, что в соответствии с документацией для атрибута android:layout
необходимо использовать конкретные идентификаторы ресурса для корня макета ViewGroup
, а также TextView
s для заголовка и сводки. Это гарантирует, что настроенный Preference
ведет себя так же, как любой запас Preference
.
Переопределив onBindViewHolder(PreferenceViewHolder)
, вы можете «найти» ImageView
и назначить его соответствующему полю ivSourceSelector . И переопределив setChecked()
, вы можете поменять рисованные объекты, когда измененное состояние Preference
изменится.
Сказав это, вот код для CustomCheckBoxPreference
:
public class CustomCheckBoxPreference extends CheckBoxPreference {
private ImageView ivSourceSelector;
public CustomCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public CustomCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomCheckBoxPreference(Context context) {
super(context);
}
@Override
public void setChecked(boolean checked) {
super.setChecked(checked);
if(ivSourceSelector != null) {
ivSourceSelector.setImageResource(getResourceId(checked));
}
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
ivSourceSelector = holder.itemView.findViewById(R.id.iv_source_selector);
if(ivSourceSelector != null){
ivSourceSelector.setImageResource(getResourceId(isChecked()));
}
}
private int getResourceId(boolean checked) {
return checked ? R.drawable.custom_checkbox_checked : R.drawable.custom_checkbox_unchecked;
}
}