如何动态显示和隐藏Android上的偏好设置?

Jap*_*tar 31 android preferenceactivity android-preferences

有没有办法动态显示和隐藏首选项?在我的情况下,我有一个复选框首选项,可以禁用或启用2个首选项组之一("with-"和"without-handicap"组).虽然这将是桌面环境中的理想GUI,但"带障碍"几乎占据整个屏幕,而另一个"无障碍"仅占用屏幕的一小部分.

我不是同时显示两个组,而是一次只显示其中一个组,并在复选框更改时动态显示或隐藏2个组.有没有办法做到这一点?

dha*_*g23 64

来自PreferenceActivity调用

Preference somePreference = findPreference(SOME_PREFERENCE_KEY);
PreferenceScreen preferenceScreen = getPreferenceScreen();
preferenceScreen.removePreference(somePreference);
Run Code Online (Sandbox Code Playgroud)

你以后可以打电话:

preferenceScreen.addPreference(somePreference);
Run Code Online (Sandbox Code Playgroud)

添加时,唯一有点棘手的部分是使订单正确.请查看PreferenceScreen文档,特别是它的基类,PreferenceGroup以获取详细信息.

注意:以上内容仅适用于a的直接孩子PreferenceScreen.如果PreferenceCategory介于两者之间,则需要从其父级中删除首选项PreferenceCategory,而不是PreferenceScreen.首先要确保在XML文件中设置PreferenceCategoryandroid:key属性.然后:

Preference somePreference = findPreference(SOME_PREFERENCE_KEY);
PreferenceCategory preferenceCategory = (PreferenceCategory) findPreference(SOME_PREFERENCE_CATEGORY_KEY);
preferenceCategory.removePreference(somePreference);
Run Code Online (Sandbox Code Playgroud)

和:

preferenceCategory.addPreference(somePreference);
Run Code Online (Sandbox Code Playgroud)

  • @Mickey Tin:当你找到它时,只需将Preference(somePreference)保存为类成员,然后你可以根据需要删除并添加它. (6认同)
  • 删除一些首选项后,第二次调用'findPreference()'返回'null',如何再次添加? (2认同)
  • 如果首选项嵌套在PreferenceCategory中,请搜索PreferenceCategory而不是PreferenceScreen。然后尝试referenceCategory.remove / addPreference (2认同)

hid*_*dro 7

不完全隐藏/显示,但如果您只想根据另一个首选项禁用/启用首选项,您可以指定android:dependency="preferenceKey"Preference.setDependency(String)

developer.android.com 中的示例:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="pref_sync"
        android:title="@string/pref_sync"
        android:summary="@string/pref_sync_summ"
        android:defaultValue="true" />
    <ListPreference
        android:dependency="pref_sync"
        android:key="pref_syncConnectionType"
        android:title="@string/pref_syncConnectionType"
        android:dialogTitle="@string/pref_syncConnectionType"
        android:entries="@array/pref_syncConnectionTypes_entries"
        android:entryValues="@array/pref_syncConnectionTypes_values"
        android:defaultValue="@string/pref_syncConnectionTypes_default" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)


小智 5

我推荐使用V7 偏好,它有setVisible()方法。但我还没有尝试过。