В соответствии с этим Суть , вы можете расширить CheckBoxPreference и создать макет с переключателем.
Примерно так: во-первых, создайте новый макет, содержащийтолько радиокнопка, назовем ее
preference_widget_radiobutton.xml
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="false"
android:focusable="false" />
, затем создадим подкласс CheckBoxPreference:
class RadioButtonPreference : CheckBoxPreference {
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) { setView() }
constructor(context: Context, attrs: AttributeSet? = null) : super(context, attrs) { setView() }
private fun setView(){
widgetLayoutResource = R.layout.preference_widget_radiobutton
}
override fun onClick() {
if (this.isChecked)
return
super.onClick()
}
}
на экране app_preferences.xml
:
<PreferenceCategory android:title="Photo Filters">
<Your_class_package_dirctory.RadioButtonPreference
android:key="naturals"
android:title="Natural" />
<Your_class_package_dirctory.RadioButtonPreference
android:key="boosted"
android:title="Boosted" />
<Your_class_package_dirctory.RadioButtonPreference
android:key="saturated"
android:title="Saturated" />
</PreferenceCategory>
Теперь, как вы можете видеть, это будет вести себя как обычный CheckBox, не будет снимать галочку с предыдущего переключателя, чтобы решить эту проблему:
В коде вашего предпочтения на экране:
class SettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener{
private val sharedPreference = AppPreferences()
private var oldCheckedPreference: RadioButtonPreference? = null
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.app_preferences, rootKey)
findPreference<RadioButtonPreference>("naturals")?.apply {
/*
You can set the defualt button to be checked by:
updateCheckedRadioButton(this)
*/
onPreferenceClickListener = this@SettingsFragment
}
findPreference<RadioButtonPreference>("boosted")?.onPreferenceClickListener = this
findPreference<RadioButtonPreference>("saturated")?.onPreferenceClickListener = this
}
private fun updateCheckedRadioButton(radioButtonPreference: RadioButtonPreference) {
//Uncheck the previous selected button if there is.
oldCheckedPreference?.isChecked = false
radioButtonPreference.isChecked = true
oldCheckedPreference = radioButtonPreference
}
override fun onPreferenceClick(preference: Preference): Boolean {
if (preference is RadioButtonPreference)
updateCheckedRadioButton(preference)
return true
}
}
и результат: