【Android】EditText输入中文时出现下划线拼音处理

    在开发过程中,有时候会需要监听EditText输入内容长度做出反应的操作。但是像小米手机的输入机制,会在输入中文的时候出现带下划线的拼音,这种情况影响了EditText输入长度监听。

    处理方法:

/**
     * 过滤非选中输入,比如输入中文时,过滤掉搜索框里已经输入的拼音(小米手机出现的情况)
     * 返回空字符串,就代表匹配不成功,返回null代表匹配成功
     */
    InputFilter iF = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            SpannableString ss = new SpannableString(source);
            Object[] spans = ss.getSpans(0, ss.length(), Object.class);
            if(spans != null) {
                for(Object span : spans) {
                    if(span instanceof UnderlineSpan) {
                        return "";
                    }
                }
            }
            return null;
        }
    };

自定义过滤机制,判断是下划线的span就不输入。

调用:

searchEt.setFilters(new InputFilter[]{iF});

此处searchEt是EditText实例。

PS:

EditText输入长度监听:

/**
     * 输入字符大于2自动搜索
     */
    private TextWatcher searchWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //输入文字或字符大于2时自动搜索
            if(s.length() >= 2) {
                showSearchFragment();
            }
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    };

EditText监听软键盘按钮事件(例子为搜索事件):

/**
     * 软键盘搜索事件
     */
    private TextView.OnEditorActionListener searchActionListener = new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                hideKeyBoard(searchEt);
                showMongo(false);
                showSearchFragment();
                return true;
            }
            return false;
        }
    };

在xml中的EditText添加属性:

android:imeOptions="actionSearch"

 

你可能感兴趣的:(Android)