我有一个带有 EditTextPreference 的首选项屏幕。如何设置提示
要么在xml中
android:hint
或在代码中
setHint(int), setHint(CharSequence hint)
在 EditTextPreference 上就像在 EditText 字段上一样?我认为它就像在 EditText 上一样,但我没有找到这样的东西。谢谢。
我有一个带有 EditTextPreference 的首选项屏幕。如何设置提示
要么在xml中
android:hint
或在代码中
setHint(int), setHint(CharSequence hint)
在 EditTextPreference 上就像在 EditText 字段上一样?我认为它就像在 EditText 上一样,但我没有找到这样的东西。谢谢。
在 XML 中为 EditTextPreference 设置提示与为 EditText 设置提示完全相同:
android:hint="This is my hint"
这将传递到对话框中的 EditText。
此行为在此处得到确认,其中显示“它是 DialogPreference 的子类,并在对话框中显示 EditText。此 EditText 可以通过 getEditText() 以编程方式修改,也可以通过 XML 通过在 EditTextPreference 上设置任何 EditText 属性来修改。”
这会更好,因为接受的答案不会在 edittext 上设置提示,但会将文本设置为 EditText(小差异万岁)。
要真正设置提示,请使用以下代码:
YourEditTextPreference.getEditText().setHint(R.string.some_hint);
您也可以考虑添加摘要,这样首选项就不会显示为空的摘要
如果您使用的是 AndroidX 首选项库,您可以OnBindEditTextListener
在您的PreferenceFragmentCompat
:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
PreferenceManager manager = getPreferenceManager();
EditTextPreference textPref = manager.findPreference("myTextPreference");
textPref.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setHint(R.string.hint);
}
});
}
当输入字段为空时,提示应按预期显示。
Kotlin 版本(AndroidX 偏好库):
val editTextPref = findPreference<Preference>("prefKey") as EditTextPreference
editTextPref.setOnBindEditTextListener {
it.hint = "My hint"
}
适用于 Android 10(API 级别 29)的模拟器。
同时,xml中指定的提示不起作用:
<EditTextPreference
android:key="prefKey"
android:title="Title"
android:hint="My hint"/>
用于android:summary
简要描述您的偏好。
您也可以使用动态设置它setSummary(CharSequence summary)
。
编辑:为了给出一个“提示”,你可以使用android:defaultValue
.
设置“提示”的方法是使用https://developer.android.com/guide/topics/ui/settings/customize-your-settings中描述的摘要提供程序
这个想法是在值为 null 或为空时打印默认值/提示 - 否则,只需打印出首选项值
val dobPreference: EditTextPreference? = findPreference("key_dob")
dobPreference?.summaryProvider = SummaryProvider<EditTextPreference> { pref ->
if (pref.text.isNullOrBlank()) {
"e.g. Enter your DOB in DDMMYYYY format" // the hint if pref is empty
} else {
pref.text // your preference value if it is not empty.
}
}