popwindow 是比较常用的一种控件,为了灵活使用,会自定义 popwidow ,继承 popwindow。
这篇文章主要介绍如何自定义 popwindow ,同时响应 popwindow 中 view 的事件。
1. 定义 MenuPop 继承 popwindow
具体代码如下 :
public class MenuPopwindow extends PopupWindow implements OnClickListener { private Context context; private View mMenu; private TextView tv1, tv2, tv3, tv4; public MenuPopwindow(Context context) { // 这一行代码一定不能忘了 // 不然,初始化的时候会有 NullPointException super(context); this.context = context; //view 控件 initView(); initData(); } private void initView() { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mMenu = inflater.inflate(R.layout.menu_main, null); tv1 = (TextView) mMenu.findViewById(R.id.menu_1); tv2 = (TextView) mMenu.findViewById(R.id.menu_2); tv3 = (TextView) mMenu.findViewById(R.id.menu_3); tv4 = (TextView) mMenu.findViewById(R.id.menu_4); tv1.setOnClickListener(this); tv2.setOnClickListener(this); tv3.setOnClickListener(this); tv4.setOnClickListener(this); } private void initData() { // 设置 popwindow 的背景 this.setContentView(mMenu); // 设置 width ,height this.setWidth(LayoutParams.MATCH_PARENT); this.setHeight(LayoutParams.WRAP_CONTENT); // 这句话很关键,popwindow 显示的时候 会获取焦点,点击其他区域可以消失 // 如果设置为 false ,点击其他区域不会消失 this.setFocusable(true); // 设置popup的 背景 ColorDrawable colorDrawable = new ColorDrawable(0Xb0000000); this.setBackgroundDrawable(colorDrawable); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.menu_1: SetToast.setToastShort(context, "我是大哥"); break; case R.id.menu_2: SetToast.setToastShort(context, "我是二哥"); break; case R.id.menu_3: SetToast.setToastShort(context, "我是三哥"); break; case R.id.menu_4: SetToast.setToastShort(context, "我是小弟"); break; default: break; } } }
在 Activity 的 点击事件中 ,弹出 popwindow
具体代码如下
<pre name="code" class="html">//初始化 MenuPopwindow popwindow = new MenuPopwindow(this); //在需要弹出 popwindow 的 地方调用 // 第一个参数,弹出的相对 parent view ,btnView // 第二个, 位置 // 第三、第四 相对 parent 的 偏移 popwindow.showAtLocation(btnView,Gravity.BOTTOM,0,0);