Android 模拟首选项屏幕并显示键值属性

Android 模拟首选项屏幕并显示键值属性,android,android-layout,layout,preferenceactivity,Android,Android Layout,Layout,Preferenceactivity,我如何模仿android的偏好屏幕或“编辑联系人”屏幕的设计,而不做太多工作? 我必须为一个对象显示12个属性,但我无法理解如何以良好的方式显示它们 不是每个属性都有一个明显的图标->我们想要标签吗 在具有图标的其他文本视图下显示文本视图看起来很糟糕,除非您想手动添加页边距。(缩进) PreferenceFragment有一种“标题”,可以用作标签和值,这将更加完美,因为我有一些交互元素(项目选择器) 但是使用不带SharedReference的preferencefragment来显示任意对

我如何模仿android的偏好屏幕或“编辑联系人”屏幕的设计,而不做太多工作? 我必须为一个对象显示12个属性,但我无法理解如何以良好的方式显示它们

  • 不是每个属性都有一个明显的图标->我们想要标签吗
  • 在具有图标的其他文本视图下显示文本视图看起来很糟糕,除非您想手动添加页边距。(缩进)
  • PreferenceFragment有一种“标题”,可以用作标签和值,这将更加完美,因为我有一些交互元素(项目选择器)
  • 但是使用不带SharedReference的preferencefragment来显示任意对象显然是一种(坏的?)

我找了很多,没有得出结论。是否有一个明显的方法我错过了?

您实际上可以不费吹灰之力创建设置活动(具有完整的功能)

转到
文件>新建>活动>设置活动

它将创建整个功能-您只需要在中指定开关、列表

res>xml>prefs.xml

通过屏幕设置的值将保存在指定键下的SharedReferences中

要截取通过UI配置到SharedReferences的值,可以将其添加到设置活动中:

 class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.pref_general, rootKey)

        findPreference<ListPreference>("system_theme")?.setOnPreferenceClickListener { 
            val value = (it as? ListPreference)?.value
            //send value to server
            return@setOnPreferenceClickListener true
        }
     }
  }
类设置片段:PreferenceFragmentCompat(){
重写FunonCreatePreferences(savedInstanceState:Bundle?,rootKey:String?){
setPreferencesFromResource(R.xml.pref_常规,rootKey)
FindReference(“系统主题”)?.setOnPreferenceClickListener{
val值=(它作为?ListPreference)?。值
//将值发送到服务器
return@setOnPreferenceClickListener真的
}
}
}

我知道我可以创建一个设置活动。但这并不是如上所述的共享引用。这是关于使用设置活动的UI样式编辑任意数据。不是存储在SharedReferences中而是发送到服务器的数据。是的,这应该可以工作,我唯一剩下的问题是:如何使用
首选项片段
实现这一点,但如何将其嵌入
底页
(DialogFragment)?因为这就是为什么不能以同样的方式自定义
首选项活动/片段的最终原因。(很明显,我不能同时从
BottomSheetDialogFragment
PreferenceFragment
中派生出来。)这已经是一个不同的问题:)你在最初的问题中没有提到底部工作表。在某些方面是的,但这是你“仅仅”使用PreferenceFragment时遇到的一个问题,你不能像使用普通布局那样控制它。