您的位置:首页 > 运维架构

PopupWindow 的使用及注意事项

2016-11-25 16:53 183 查看
在项目里面很多时候都会有弹窗显示列表数据这样的需求,很多人都用Spanner,其实效果不佳,更多的是自定义布局显示,通常使用PopupWindow代替,直接上代码:

final View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_search_car_popu, null);

mPopupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, true);
mPopupWindow.setTouchable(true);
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());


这样就创建完成了,独立出一个方法来显示:
//显示popup
private void showPoupwindow() {
if (mPopupWindow.isShowing()) {

mPopupWindow.dismiss();

} else {

// 以下拉列表方式显示
mPopupWindow.showAsDropDown(llSearch, 0, 0);

}
}PopupWindow显示的方式有两种,根据需求而定,显示指定位置showAtLocation(),以下拉列表方式显示showAsDropDown.
注意:

       mPopupWindow.setTouchable(true);

        mPopupWindow.setFocusable(true);

        mPopupWindow.setOutsideTouchable(true);

这三个方法不能缺。

如果你的PopupWindow需要paddingBottom多少dp,这时候点击距离底部的空白处PopupWindow不能隐藏掉,接下来你需要这样做,

view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int height = view.findViewById(R.id.view).getBottom();
int y = (int) event.getY();
if (event.getAction() == MotionEvent.ACTION_UP) {
if (y < height) {
mPopupWindow.dismiss();
}
}
return true;
}
});

需要拿到距离底部的位置和点击的paddingBottom空白处,判断Y轴的距离,才能隐藏掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息