1. 程式人生 > >事件分發理解:在整個介面的觸控事件中分別處理某些view

事件分發理解:在整個介面的觸控事件中分別處理某些view

軟鍵盤:

1,showSoftInput(view, InputMethodManager.SHOW_FORCED);

可通過第二個引數flags設定SHOW_IMPLICIT效果就是觸控edittext外任何區域就隱藏軟鍵盤

設定flags為SHOW_FORCED觸控任何區域不隱藏

 

2,在重寫dispatchTouchEvent,在down事件中隱藏軟鍵盤。事件分發大家應該知道,是從根佈局開始向上傳遞,這樣攔截向上傳遞的觸控事件,return true消費事件防止點選穿透。

   @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
           隱藏軟鍵盤
                return true;
        }
        return super.dispatchTouchEvent(ev);
    }

 

3,如果想控制某個控制元件,或者控制元件的某個區域,加上一個判斷即可:

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

           if(isShouldHideKeyboard(任意控制元件,ev)){

              隱藏軟鍵盤

           }
                return true;
        }
        return super.dispatchTouchEvent(ev);
    }

private boolean isShouldHideKeyboard(View v, MotionEvent event) {
    if (v != null && (v instanceof LinearLayout)) {
        int[] l = {0, 0};
        v.getLocationInWindow(l);
        int left = l[0],
                top = l[1],
                bottom = top + v.getHeight(),
                right = left + v.getWidth();
        if (event.getX() > left && event.getX() < right
                && event.getY() > top && event.getY() < bottom) {
            // 點選EditText的事件,忽略它。
            return false;
        } else {
            return true;
        }
    }
    return false;
}

氣泡

實現氣泡效果也是運用事件分發控制顯隱,將氣泡直接寫在佈局中即可。

都是很基礎的東西,實現也簡單,我彷彿看到了大佬鄙夷的眼神。