事件分發理解:在整個介面的觸控事件中分別處理某些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;
}
氣泡
實現氣泡效果也是運用事件分發控制顯隱,將氣泡直接寫在佈局中即可。
都是很基礎的東西,實現也簡單,我彷彿看到了大佬鄙夷的眼神。