如何将InputFilter应用到EditTextPreferences?

问题描述 投票:0回答:4

我想将 InputFilter 应用到我的 EditTextPreferences...

在使用 PreferenceActivity 之前,我有带有这样的过滤器的 EditText:

            et1 = (EditText) findViewById(R.id.editText1);
            et2 = (EditText) findViewById(R.id.ETminsim);
            et3 = (EditText) findViewById(R.id.ETdelay);

            et1.setText(Integer.toString(PlotView.playlist_size), EditText.BufferType.EDITABLE);

            et2.setText(Integer.toString(conversorToInt(PlotView.min_sim)), EditText.BufferType.EDITABLE);
            et3.setText(Integer.toString(MusicService.getSeek()/1000), EditText.BufferType.EDITABLE);

            et1.setFilters(new InputFilter[]{ new InputFilterMinMax(1, 30)});
            et2.setFilters(new InputFilter[]{ new InputFilterMinMax(0, 100)});
            et3.setFilters(new InputFilter[]{ new InputFilterMinMax(0, 300)});

但是我如何引用 EditTextPreference 的 EditText 来设置这些过滤器?

我的新代码:

public void onCreate(Bundle bundle) {
                 super.onCreate(bundle);

                 getPreferenceManager().setSharedPreferencesName(Singleton.PREFS_NAME);
                 addPreferencesFromResource(R.xml.prefs);

                 //TODO set InputFilter
}
android filter preferences
4个回答
9
投票

Konstantin 的说法大部分是正确的。将他的答案与塞巴斯蒂安对其答案的评论结合起来,你会得到

EditText editText1 = ((EditTextPreference) findPreference(preference_1_key))
                         .getEditText();
editText1.setFilters(new InputFilter[]{ new InputFilterMinMax(1, 30) });

0
投票

假设这是您偏好的 Activity 并且您可以通过 id 获取项目:

        EditTextPreference editTextPreference = findByViewId(R.id.editPref1);
        EditText editText = editTextPreference.getEditText();
        editText.setFilters(................);

0
投票

这样更灵活。

public class Utility {
public static void setEditTextInputFilter(EditText editText, final String blockCharacterSet) {
    InputFilter filter = new InputFilter() {

        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

            if (source != null && blockCharacterSet.contains(("" + source))) {
                return "";
            }
            return null;
        }
    };

    editText.setFilters(new InputFilter[]{filter});
}

}

使用方法:

exampleEditText 是要阻止输入“-”的editText。

Utility.setEditTextInputFilter(exampleEditText, "-");

0
投票

自 androidx 起,需要在片段

setOnBindEditTextListener()
回调期间使用
onCreate()
方法,以便获取
EditText
对象的句柄,现在可以在其中应用输入过滤器。

 public class SettingsFragment extends PreferenceFragmentCompat {
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     EditTextPreference pref1 = (EditTextPreference) findPreference(preference_1_key);
     pref1.setOnBindEditTextListener(editText1 -> 
            editText1.setFilters(
                new InputFilter[]{ new InputFilterMinMax(1, 30)}
     ));
     
© www.soinside.com 2019 - 2024. All rights reserved.