gpt4 book ai didi

android - 如何在 PreferenceScreen 中显示 RadioButton 列表(而不是在对话框中)

转载 作者:行者123 更新时间:2023-12-05 05:08:46 25 4
gpt4 key购买 nike

如何在 PreferenceSecreen 中而不是在对话框中显示单选按钮列表?必须多次单击才能从此列表中选择一个项目,这真的很烦人。

预期结果

enter image description here

当前结果

enter image description here

enter image description here

app_preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<ListPreference
android:key="prefPhotoFilter"
android:title="Photo filter"
android:entries="@array/photoFilters" />

</PreferenceScreen>

strings.xml

<string-array name="photoFilters">
<item name="1">Natural</item>
<item name="2">Boosted</item>
<item name="3">Saturated</item>
</string-array>

enter image description here

最佳答案

根据这个Gist , 你可以扩展 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
}

}

结果是:

result

关于android - 如何在 PreferenceScreen 中显示 RadioButton 列表(而不是在对话框中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58102804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com