1. 程式人生 > >android: EditText一邊輸入一邊進行判斷顯示操作,運算複雜時的解決方案

android: EditText一邊輸入一邊進行判斷顯示操作,運算複雜時的解決方案

一般情況下,在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(); } } });