enable/disable 或 show/hide SharedPreferences 如何在程序中使用
How do enable/disable or show/hide SharedPreferences in programs
在 Android 程序中 enable/disable 和 show/hide 首选项似乎应该非常简单。但是除了直接在 XML 文件本身之外,我无法让它工作。我只能找到已弃用首选项的教程和示例。这是我试图开始隐藏和禁用下面两个首选项的示例。
root_preferences.xml
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="hidePref"
app:title="Hide/Show"
app:summary="Change this preference's visibility"/>
<Preference
android:key="disablePref"
app:title="Enable/Disable"
app:summary="Enable or Disable this preference"/>
</androidx.preference.PreferenceScreen>
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
...
val sharedPreferences = Preferencemanager.getDefaultSharedPreferences(this)
//No idea how to do the following but here are guess that obviously do not work
sharedPreferences.edit().isVisible("hidePref", View.GONE).apply()
sharedPreferences.edit().isEnabled("disabledPref", false).apply()
...
}
SharedPreferences
和Preference
是两个截然不同的类。 SharedPreferences
是一个单例对象,可让您与包含首选项数据映射的属性文件进行交互。 Preference
是一个视图小部件,允许用户直接修改 SharedPreferences
.
您所描述的是修改视图小部件 Preference
的可见性或启用状态。这根本不会涉及SharedPreferences
。
据推测,您在 PreferenceFragmentCompat
和 documentation explains 屏幕上的偏好视图。要修改特定的 Preference
视图,请在片段中使用 findPreference()
。如有必要,您可以指定比 Preference
更具体的类型(只要它与您正在查找的 XML 中的实际偏好类型匹配)。
return 类型可以为 null,因为如果找不到它,它 return 就是 null。您使用其键查找首选项。因此,要执行您发布的代码似乎打算执行的操作,您可以输入:
class MySettingsFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, null)
findPreference<Preference>("hidepref")?.isVisible = false
findPreference<Preference>("disabledPref")?.isEnabled = false
}
}
我个人选择将我所有的首选项键放在一个字符串资源文件中(并在该文件中使用 tools:ignore="MissingTranslation"
以防止 linter 抱怨)。这样,键的文字字符串只在一个地方输入,减少了错误。我编写了辅助函数,用于从 SharedPreferences
获取这些偏好值或使用资源 ID 查找 Preference
视图。
在 Android 程序中 enable/disable 和 show/hide 首选项似乎应该非常简单。但是除了直接在 XML 文件本身之外,我无法让它工作。我只能找到已弃用首选项的教程和示例。这是我试图开始隐藏和禁用下面两个首选项的示例。
root_preferences.xml
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="hidePref"
app:title="Hide/Show"
app:summary="Change this preference's visibility"/>
<Preference
android:key="disablePref"
app:title="Enable/Disable"
app:summary="Enable or Disable this preference"/>
</androidx.preference.PreferenceScreen>
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
...
val sharedPreferences = Preferencemanager.getDefaultSharedPreferences(this)
//No idea how to do the following but here are guess that obviously do not work
sharedPreferences.edit().isVisible("hidePref", View.GONE).apply()
sharedPreferences.edit().isEnabled("disabledPref", false).apply()
...
}
SharedPreferences
和Preference
是两个截然不同的类。 SharedPreferences
是一个单例对象,可让您与包含首选项数据映射的属性文件进行交互。 Preference
是一个视图小部件,允许用户直接修改 SharedPreferences
.
您所描述的是修改视图小部件 Preference
的可见性或启用状态。这根本不会涉及SharedPreferences
。
据推测,您在 PreferenceFragmentCompat
和 documentation explains 屏幕上的偏好视图。要修改特定的 Preference
视图,请在片段中使用 findPreference()
。如有必要,您可以指定比 Preference
更具体的类型(只要它与您正在查找的 XML 中的实际偏好类型匹配)。
return 类型可以为 null,因为如果找不到它,它 return 就是 null。您使用其键查找首选项。因此,要执行您发布的代码似乎打算执行的操作,您可以输入:
class MySettingsFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, null)
findPreference<Preference>("hidepref")?.isVisible = false
findPreference<Preference>("disabledPref")?.isEnabled = false
}
}
我个人选择将我所有的首选项键放在一个字符串资源文件中(并在该文件中使用 tools:ignore="MissingTranslation"
以防止 linter 抱怨)。这样,键的文字字符串只在一个地方输入,减少了错误。我编写了辅助函数,用于从 SharedPreferences
获取这些偏好值或使用资源 ID 查找 Preference
视图。