天天看點

android popuowindow動畫,處理Android6.0中popuoWindow的相容性

前記

popupWindow是Android開發中很重要的一個控件。具體的使用方式我就不多提了。但是popupWindow在Android6.0之後是有些許修改的,這些修改導緻我在開發中遇到了很大的坑。在此提出來,希望大家能夠規避。

變更

在Android6.0之前popupwindow如果設定

popupWindow.setOutsideTouchable(true);

popupWindow.setFocusable(false)

那麼點選螢幕外部是不會導緻popupWindow觸發dismiss()事件的。而在Android6.0下則會觸發。

問題

一般情況下我們使用popupWindow如下圖

android popuowindow動畫,處理Android6.0中popuoWindow的相容性

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;

}

});