android: EditText一邊輸入一邊進行判斷顯示操作,運算複雜時的解決方案
阿新 • • 發佈:2019-02-17
一般情況下,在afterTextChanged中處理一下,例如輸入數字大小,簡單的顯示隱藏等等
etZhejia.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
doSomething();
}
});
如果,需要做的判斷很複雜,那麼沒輸入一個字元,都得重複呼叫doSomething()方法,輸入過快時,可能會出現閃退情況。我的解決方法就是判斷鍵盤是否存在,鍵盤消失後,中呼叫一次doSomething()方法。
PS: 最好同時為最外層View新增一個onTouch方法,touch後就隱藏鍵盤,主動讓他執行doSomething();
findViewById(R.id.ll).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isOpen = imm.isActive();//isOpen若返回true,則表示輸入法開啟
if (isOpen) {
try {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); //強制隱藏鍵盤
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
});
llRoot.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//比較Activity根佈局與當前佈局的大小
int heightDiff = llRoot.getRootView().getHeight() - llRoot.getHeight();
if (heightDiff > 100) {
//大小超過100時,一般為顯示虛擬鍵盤事件
} else {
//大小小於100時,為不顯示虛擬鍵盤或虛擬鍵盤隱藏
changeDiscount();
}
}
});