在開發過程中,有時候會需要監聽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"