java Android EditView输入限制(软键盘限制)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Android EditView输入限制(软键盘限制)相关的知识,希望对你有一定的参考价值。

传入正则规则即可,灵活性比较高。

public static final String LIMIT_PHONE_INPUT = "^1\\d{0,10}$";//限制只允许输入首位为1的最多11位的数字
EditView etInputFilter = (EditView)findViewById(R.id.etInputFilter);
etInputFilter.setFilters(new EditInputFilter(LIMIT_PHONE_INPUT));
/**
 * Created by xugang on 2016/6/22.
 * EditView过滤器
 */
public class EditInputFilter implements InputFilter {
    //
    private String regular;
    public EditInputFilter(String regular) {
        this.regular = regular;
    }
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (regular == null)
            return source;
        if (dstart == 0 && dend == 0 && TextUtils.isEmpty(source))
            return null;
        if (dstart == dend) {
            //输入
            StringBuilder builder = new StringBuilder(dest);
            if (builder.append(source).toString().matches(regular)) return source;
            else return "";
        }
        return source;
    }
}
此方式也比较灵活,不错的方式。

EditText etTextWatcher = (EditText) findViewById(R.id.etTextWatcher);
etTextWatcher.addTextChangedListener(new EditTextWatcher(etTextWatcher));
/**
 * Created by xugang on 2016/6/23.
 * 输入监听
 */
public class EditTextWatcher implements TextWatcher {
    private EditText editText;
    public EditTextWatcher(EditText editText) {
        this.editText = editText;
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s != null && s.length() > start) {
            //输入判断规则
            if (!RegularUtils.compare(s.toString().trim(), RegularUtils.LIMIT_PHONE_INPUT)) {
                editText.setText(s.subSequence(0, s.length() - 1));
                editText.setSelection(s.length() - 1);
            }
        }
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
}
如下设置为:只能输入0-5之间的数字,且最多11位。

 <EditText
        android:id="@+id/etDigits"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:digits="012345"
        android:hint="通过digits设置"
        android:inputType="number"
        android:maxLength="11" />



PS:优点:简单方便; 
缺点:只能设置简单的限制,如果需要设置的比较复杂,如数字字母和某些特定字符则需要在digits中穷举出来。

以上是关于java Android EditView输入限制(软键盘限制)的主要内容,如果未能解决你的问题,请参考以下文章

android 使用Handler更新TextView时 手动编辑EditView时根本输入不了任何东西

Android开发 EditView的开发记录

Android EditView用法小结

Android EditView用法小结

EditView不可编辑状态和可编辑状态动态切换 及 EditView的其它特效

Android——输入法搜索