首页 > 代码库 > PopupWindow的代码实现,以及和AlertDialog的区别

PopupWindow的代码实现,以及和AlertDialog的区别

 PopupWindow和AlertDialog本质区别为:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。


以下是PopupWindow

public class MainActivity extends ActionBarActivity {


private RadioGroup rg;

private Button btn;

private Button btn_cancle;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn = (Button) findViewById(R.id.btn);

final TextView tv_show=(TextView) findViewById(R.id.tv_show);

//按钮点击事件

btn.setOnClickListener(new OnClickListener() {

private PopupWindow pw;


@Override

public void onClick(View arg0) {

    View contentView=View.inflate(MainActivity.this, R.layout.popu_layout, null);

    rg = (RadioGroup) contentView.findViewById(R.id.rg);

    btn_cancle = (Button) contentView.findViewById(R.id.btn_cancel);

    //实例化PopupWindow

    pw = new PopupWindow(contentView, 200, 200, true);

    //设置PopupWindow的位置

pw.showAtLocation(btn, Gravity.CENTER, 0, 0);

//设置RadioGroup的选择事件

rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override

public void onCheckedChanged(RadioGroup arg0, int arg1) {

RadioButton  rb_item=(RadioButton) rg.findViewById(arg0.getCheckedRadioButtonId());

tv_show.setText(rb_item.getText().toString());

}

});

//取消按钮事件

btn_cancle.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

//关闭PopupWindow窗口

pw.dismiss();

}

});

}

});

}


本文出自 “安卓开发零基础” 博客,请务必保留此出处http://jinchao.blog.51cto.com/9651275/1586787

PopupWindow的代码实现,以及和AlertDialog的区别