前記
popupWindow是Android開發中很重要的一個控件。具體的使用方式我就不多提了。但是popupWindow在Android6.0之後是有些許修改的,這些修改導緻我在開發中遇到了很大的坑。在此提出來,希望大家能夠規避。
變更
在Android6.0之前popupwindow如果設定
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(false)
那麼點選螢幕外部是不會導緻popupWindow觸發dismiss()事件的。而在Android6.0下則會觸發。
問題
一般情況下我們使用popupWindow如下圖
popupWindow
點選全部類型彈出搜尋框,再次點選關閉搜尋框。
popButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
popupWindow.showAsDropDown(popButton);
}
}
});
這部分的代碼在Android6.0以下的機子會正常,但是在Android6.0以上會出現,在popupWindow彈出後,點選“全部類型”并不能正常關閉popupWindow,而是popupWindow關閉後再次打開。
這是因為再次點選“全部類型”首先會使popupWindow.dismiss()如此導緻你在回調中popupWindow.isShowing()判斷為false再次打開了popupWindow
解決辦法
其實很簡單,隻要攔截popupWindow的touch事件即可.由我自自己根據情況來處理popupWindow的開關事件
popupWindow.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
return true;
}
return false;
}
});