android - 如何在首选项中制作自定义对话框首选项

标签 android sharedpreferences android-preferences listpreference dialog-preference

我搜索了这个论坛的所有内容,但没有找到我真正需要的东西。我在首选项中需要一个自定义 DialogPreference,但 DialogPreference 不应该有我讨厌的蓝条标题,而且我已经为其他 Activity 准备了一个 Activity 标题模板 xml 文件,可以用作自定义 Activity 标题。所以我想使用它在这个 dialogPreence 上。另外我想要自定义首选项文件名,但这里的问题是它创建了两个首选项文件名,一个用于首选项,另一个用于 DialogPreference

但我在这里找到了类似的东西 Using EditTextPreference with 2 user input fields

    <com.yourdomain.YourDialogPreference
        android:title="Title"
        android:summary="Summary"
        android:key="dialog_preference"/>

到目前为止我已经完成了这个。 DialogPreference 打开良好,但如何将我的页眉模板附加到此自定义 DialogPreference

最佳答案

我发现了自己。给你。

第 1 步在 DialogPreference XML 中包含 header 模板的以下行

<include layout="@layout/activity_header_template" />

并准备自己的自定义对话框布局,就像普通的自定义对话框模板一样。真正的需求是,我想自定义 DialogPreference,我想要密码 1 和密码 2 的两个输入。(只是为了确认密码)

这是我的 ListPreference XML 代码

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

    <PreferenceCategory android:title="@string/preference_header_encryption">

        <CheckBoxPreference
            android:key="prefkey_use_passcode"
            android:title="@string/preference_name_set_passcode"
            android:summary="@string/preference_summary_set_passcode" />

        <!-- This is how you need to attach CustomDialogPrefernce, by using the class name -->
        <!-- Please ignore title here. Title will come from DialogPreference Constructor --> 
        <com.nerds.notes.SettPassword
            android:key="prefkey_set_passcode"
            android:summary="@string/preference_app_protection"
            android:dialogMessage="@string/action_delete"
            android:positiveButtonText="@string/passcode_ok_button_text"
            android:negativeButtonText="@string/passcode_cancel_button_text"
            android:dependency="prefkey_use_passcode" />

        <CheckBoxPreference
            android:key="prefkey_app_protection"
            android:title="@string/preference_app_protection"
            android:summary="@string/preference_summary_app_protection"
            android:dependency="prefkey_use_passcode" />

    </PreferenceCategory>

</PreferenceScreen>

以下几行非常重要,DialogPreference 构造函数

public SettPassword(Context context, AttributeSet attrs) {
    super(context, attrs);
    setPersistent(false);
    setTitle(R.string.preference_name_set_passcode); // This will override ListPreference Title
    setDialogLayoutResource(R.layout.passcode_set_dialog_template);
}

以下行应在 ListPreference OnCreate 方法中编码以具有自定义首选项文件名

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PreferenceManager manager = getPreferenceManager();
    manager.setSharedPreferencesName("Your Preference File Name");
    manager.setSharedPreferencesMode(MODE_PRIVATE);

    addPreferencesFromResource(R.xml.settings); // ListPreference XML file from XML Folder
}

关于android - 如何在首选项中制作自定义对话框首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474020/

相关文章:

java - SharedPreferences 没有被清除 android

java - 将网络位置保存为 .txt 文件(不使用 GPS)

android - Android 中的声音通知?

Android:从 SharedPreferences 更新显示的首选项

java - 表布局中的数据持久化

Android 在 preferences.xml 文件中使用字符串资源

android - 如何使用 Robolectric 测试 PreferenceFragment

android - 在运行时将项目添加到 ListPreference

java - Android Wear 位置

java - 添加一些代码行后,应用崩溃