【问题标题】:How to set maximal length of EditTextPreference of AndroidX Library?如何设置 AndroidX 库的 EditTextPreference 的最大长度?
【发布时间】:2019-05-14 10:59:40
【问题描述】:

最近,我将我的 android 项目迁移到 AndroidX,并使用 AndroidX 库中的 EditTextPreference。现在,我想将 EditTextPreference 的最大长度设置为 50。我尝试使用:

android:maxLength="50"

但它不起作用。

似乎所有 android 命名空间都不适用于 EditTextPreference 并且没有代码建议,所以我找不到任何相关代码来设置最大长度。如何设置最大长度?

【问题讨论】:

  • 你在EdiText上使用过InputFilter过滤器吗?
  • 太棒了。我们能够在 xml 文件中定义布局属性,现在我们必须在源代码中修补它们。我在“习惯工作”的事情上浪费时间。而且代码在每次迭代中都会变得更糟糕。

标签: android androidx edittextpreference


【解决方案1】:

您需要通过键找到您的 EditTextPreference,然后将 onBindEditTextListener 设置为它并在 onBindEditText 方法中更改布局属性:

EditTextPreference preference = findPreference("edit_text_preference_key");
    preference.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
        @Override
        public void onBindEditText(@NonNull EditText editText) {
            editText.setInputType(InputType.TYPE_CLASS_NUMBER); // set only numbers allowed to input
            editText.selectAll(); // select all text
            int maxLength = 2;
            editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); // set maxLength to 2
        }
    });

您可以将此代码放在您的 PreferencesFragment 或 PreferencesActivity 的 onResume() 方法中。

【讨论】:

  • 我认为您应该将新的 InputFilter 附加到之前可能已添加到 EditText 的那些上。您可以通过调用 editText.getFilters() 来获取它们
  • 关于它是如何完成的,请在此处查看答案:stackoverflow.com/a/25571410/96313
【解决方案2】:

您可以尝试使用 java 代码,它会起作用。 这里被剪掉了。

EditText et = (EditText) findViewById(R.id.myeditText);
et.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(50) }); // maximum length is 50

希望对你有帮助。

【讨论】:

  • 很抱歉,我使用的是 EditTextPreference 而不是 EditText,所以上面的代码不起作用。
  • 好的,检查this答案,
  • 那是另一种情况。我想要的是限制输入时的长度,而不是值。
  • 这个建议是正确的,尽管您不会使用findViewById() 来查找EditText。相反,您首先要执行EditTextPreference myPref = findPreference("myPrefKey"),然后如果myPref 不为空,您将执行类似myPref.setOnBindEditTextListener(editText -> { editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(MAX_CHARS}); });} 这样的操作,这将破坏其他InputFilters-您可以找到如何保存它们here。那里也有一个较短的 Kotlin 版本。应根据需要限制输入时的长度。
【解决方案3】:

这是设置 EditTextPreference 最大长度(在本例中为 10)的代码:

final EditTextPreference prefCustomText = findPreference(ActivityPreferences.PREF_DISPLAY_CUSTOM_TEXT);
prefCustomText.setOnBindEditTextListener(editText -> {
    editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
});

我正在添加@Viktor Brešan 所写的信息:

我认为您应该将新的 InputFilter 附加到可能具有 之前已添加到 EditText。您可以通过拨打电话获取它们 editText.getFilters()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多