【问题标题】:Mimic preference screen and displaying key-value attributes模拟首选项屏幕并显示键值属性
【发布时间】:2020-01-14 14:57:53
【问题描述】:

如何在不做太多工作的情况下模仿偏好屏幕的设计或 android 的“编辑联系人”屏幕? 我必须为一个对象显示大约 12 个属性,我不知道如何以一种好的方式显示它们。

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

我搜索了很多,但没有得出结论。有没有明显的方法我错过了?

【问题讨论】:

    标签: android android-layout layout preferenceactivity


    【解决方案1】:

    您实际上可以毫不费力地创建设置活动(具有完整功能)。

    转到File > New > Activity > Settings Activity

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

    res > xml > prefs_.xml

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

    要拦截通过 UI 配置到 SharedPreferences 的值,您可以将其添加到 SettingsActivity:

     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
            }
         }
      }
    

    【讨论】:

    • 我知道我可以创建一个设置活动。但这与上述的共享偏好无关。这是关于使用设置活动的 UI 样式来编辑任意数据。未存储在 sharedpreferences 中但发送到服务器的数据。
    • 是的,应该可以,我剩下的唯一问题是:如何使用 PreferenceFragment 执行此操作,但将其嵌入到 BottomSheet(DialogFragment) 中?因为这最终是为什么一个人不会使用PreferenceActivity/Fragment -> 无法以相同的方式自定义它。 (我显然不能同时从BottomSheetDialogFragmentPreferenceFragment 派生..)
    • 这已经是一个不同的问题了 :) 您在原始问题中没有提到底页。
    • 在某些情况下是的,但这是您在“仅”使用 PreferenceFragment 时遇到的具体问题,您无法像使用普通布局时那样控制它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2014-02-21
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多