首页 > 代码库 > 自定义 Popwindow

自定义 Popwindow

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;
		}
	}

}


下面是 popwindow 的 使用 

在 Activity 的 点击事件中 ,弹出 popwindow 

具体代码如下 

<pre name="code" class="html">//初始化 
MenuPopwindow popwindow = new MenuPopwindow(this);

//在需要弹出 popwindow 的 地方调用 
// 第一个参数,弹出的相对 parent view  ,btnView 
// 第二个, 位置
// 第三、第四 相对 parent 的 偏移
popwindow.showAtLocation(btnView,Gravity.BOTTOM,0,0);



这样一个简单的 popwindow 就定义好了。显示效果 如下 














自定义 Popwindow