如何在Preference中创建自定义对话框偏好设置

5
我在这个论坛中搜索了很久,但没有找到我需要的东西。我需要在Preference中使用一个自定义的DialogPreference,但是该DialogPreference不应该有蓝色标头,因为我讨厌它。我已经为其他活动准备了一个activity header模板xml文件,可以用作自定义活动标题,所以我想在这个dialogPreference上使用它。此外,我想要自定义首选项文件名,但问题在于它会创建两个首选项文件名,一个用于Preference,另一个用于DialogPreference。

但我在这里找到类似的内容:使用具有2个用户输入字段的EditTextPreference

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

到目前为止,我已经完成了这个任务。DialogPreference打开得很好,但是我该如何将我的标题模板附加到这个自定义的DialogPreference上呢?

1个回答

4
我会尽力协助您完成翻译。以下是您需要翻译的内容:

我自己解决了,这是解决方案:

首先,在DialogPreference XML文件的Header Template中添加以下行:

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

1
这里我使用的一些方法已经过时了。 - Kirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接