在开发过程中,有时候会需要监听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"