【问题标题】:Android EdittextPreference Hint (android:hint)Android EdittextPreference 提示 (android:hint)
【发布时间】:2011-11-20 21:06:39
【问题描述】:

我有一个带有 EditTextPreference 的首选项屏幕。 如何设置提示

xml 之类的

android:hint

或在代码中

setHint(int), setHint(CharSequence hint)

在 EditTextPreference 上就像在 EditText 字段上一样? 我认为它就像在 EditText 上一样,但我没有找到这样的东西。 谢谢。

【问题讨论】:

    标签: android android-edittext preference hint preferencescreen


    【解决方案1】:

    在 XML 中为 EditTextPreference 设置提示与为 EditText 设置提示完全相同:

    android:hint="This is my hint"
    

    这会传递到对话框中的 EditText。

    此行为已确认 here,其中显示“它是 DialogPreference 的子类,并在对话框中显示 EditText。此 EditText 可以通过 getEditText() 以编程方式修改,也可以通过 XML 通过设置任何 EditText 属性来修改编辑文本首选项。”

    【讨论】:

    • 我可以确认它有效(CM 7,1)。谢谢。这应该被标记为正确答案。
    【解决方案2】:

    这样更好,因为接受的答案不会在编辑文本上设置提示,但会将文本设置为 EditText(小差异万岁)。

    要真正设置提示,请使用以下代码:

    YourEditTextPreference.getEditText().setHint(R.string.some_hint);
    

    您也可以考虑添加摘要,这样首选项就不会显示为空的摘要

    【讨论】:

    • 请为您的答案添加一些解释,例如至于为什么它更好。
    • 此方法已被弃用和删除。您不能再从 EditTextPreference 访问 EditText。
    【解决方案3】:

    如果您使用的是 AndroidX 首选项库,您可以在 PreferenceFragmentCompat 中使用 OnBindEditTextListener 分配提示:

    @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);
            }
        });
    }
    

    当输入字段为空时,提示应按预期显示。

    【讨论】:

      【解决方案4】:

      Kotlin 版本(AndroidX 偏好库)

      val editTextPref = findPreference<Preference>("prefKey") as EditTextPreference
      editTextPref.setOnBindEditTextListener {
          it.hint = "My hint"
      }
      

      适用于 Android 10(API 级别 29)的模拟器。

      同时xml中指定的hint不起作用

      <EditTextPreference
                      android:key="prefKey"
                      android:title="Title"
                      android:hint="My hint"/>
      

      【讨论】:

        【解决方案5】:

        使用android:summary 简要说明您的偏好。

        您也可以使用 setSummary(CharSequence summary) 动态设置。

        编辑: 提供“提示”,您可以使用 android:defaultValue

        【讨论】:

        • 我知道这一点,但是没有办法像在编辑文本字段上设置提示吗?
        • 我已经动态设置了摘要,默认值并不是我想要的,但无论如何,谢谢。
        【解决方案6】:

        设置“提示”的方法是使用摘要提供程序,如 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.
            }
        }
        

        【讨论】:

        • 您没有在答案中设置 android:hint 值。这里不需要SummaryProvider
        猜你喜欢
        • 2014-02-14
        • 2011-07-20
        • 2021-03-14
        • 2013-03-25
        • 1970-01-01
        • 2019-08-25
        • 2012-10-05
        • 1970-01-01
        • 2015-02-12
        相关资源
        最近更新 更多