在项目里面很多时候都会有弹窗显示列表数据这样的需求,很多人都用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轴的距离,才能隐藏掉。