如何设置 AndroidX 库的 EditTextPreference 的最大长度?

How to set maximal length of EditTextPreference of AndroidX Library?

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

android:maxLength="50"

但它不起作用。

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

您可以尝试使用 java 代码,它会起作用。 此处已截取。

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

希望对你有所帮助。

您需要通过按键找到您的 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() 方法中。

这是设置 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 所写的信息:

I think you should append the new InputFilter to ones that might have been added to EditText previously. You can get them by calling editText.getFilters()