最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow,网上看了一下,popwindow挺简单的,可定制性挺强的,符合我的要求,所以,借鉴网上看的代码,自己撸了一遍。写篇博客以防忘记。
首先,先写个自定义布局,代码如下
<&#63;xml version="1.0" encoding="utf-8"&#63;>
第二步,在代码中定义popwindow样式,绑定点击事件,代码如下:
// // 获取自定义布局文件pop.xml的视图 View customView = getActivity().getLayoutInflater().inflate(R.layout.lay_circle_pop_drop_down_qr_code, null, false); // 创建PopupWindow实例,200,150分别是宽度和高度 mQrCodePopWindow = new PopupWindow(customView, CommonUtil.dipToPx(getContext(),110), ViewGroup.LayoutParams.WRAP_CONTENT,true); // 设置动画效果 [R.style.AnimationFade 是自己事先定义好的] // popupwindow.setAnimationStyle(R.style.AnimationFade); // popupwindow.setTouchable(true); // popupwindow.setOutsideTouchable(true); mQrCodePopWindow.setBackgroundDrawable(new BitmapDrawable()); customView.findViewById(R.id.lin_scan_qr_code).setOnClickListener(v -> { ToastUtil.show(getContext(),"扫一扫"); dismissQrCodePopWindow(); }); customView.findViewById(R.id.lin_my_qr_code).setOnClickListener(v -> ToastUtil.show(getContext(),"二维码"));
注意,代码中的true为setFoucusable,如要点击空白处隐藏popwindow的话,setFocusable(true)和setBackground()两者必不可少(亲测)。
最后,为空间添加点击事件,控制下拉框的显示隐藏,代码如下:
@OnClick(R.id.lin_top_right) public void onClick(View v) { if (mQrCodePopWindow != null&& mQrCodePopWindow.isShowing()) { mQrCodePopWindow.dismiss(); } else { initQrCodePopWindow(); mQrCodePopWindow.showAsDropDown(v); } }
(由于暂时没有发现好的动画效果,所以没有添加动画,如果大家有发现好的动画,还请告知一二,在此谢过)
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。