1、含义
写的第一篇技术文章还有点小激动,话说popupwindow顾名思义就是类似于对话框样式布局显示,但是却有别于对话框,到底哪里有区别呢,还请客官您细细观看。
2、区别
1、对话框位置相对来说比较固定,而popupwindow位置相对随意一些,可以*控制。
2、对话框是线程非阻塞的,而popupwindow是线程阻塞的。
3、代码说明
1、 话不多说,规矩我懂,先上图(样式比较丑还请您见谅):
2、先看popupwindow代码,容我细细道来:
1)、首先自定义一个popupwindow
public class AddPopuwindow extends PopupWindow {
public View mView;
public AddPopuwindow(Activity context) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = inflater.inflate(R.layout.popuwindow_dialog, null);
int height = context.getWindowManager().getDefaultDisplay().getHeight();
int width = context.getWindowManager().getDefaultDisplay().getWidth();
// 设置选择的popuwndow的View
this.setContentView(mView);
// 设置弹出的popuwindow的宽
this.setWidth(width / 2 + 50);
// 设置弹出的popuwndow的高
this.setHeight(LayoutParams.WRAP_CONTENT);
// 设置popuwindow的弹出窗体是否可以点击
this.setFocusable(true);
this.setOutsideTouchable(true);
// 刷新状态
this.update();
// 实例化一个colorDrawable颜色为半透明
ColorDrawable colorDrawable = new ColorDrawable(0000000000);
// 点击返回键和其他地方使其消失,设置了这个才能触发OnDismissListener,设置其他控件变化等操作
this.setBackgroundDrawable(colorDrawable);
// 设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.AnimationPreview);
// 绑定布局
LinearLayout addTaskLayout = (LinearLayout) mView
.findViewById(R.id.add_task_layout);
addTaskLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// 关闭popuwindow
AddPopuwindow.this.dismiss();
}
});
}
//显示popupwindow
public void showPopuwindow(View view) {
if (!this.isShowing()) {
// 以下拉方式显示popuwindow
this.showAsDropDown(view, view.getLayoutParams().width / 2, 18);
} else {
this.dismiss();
}
}
2、怎么调用呢?当然是绑定布局然后直接调用了
Button mBtnAdd;
mBtnSet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AddPopuwindow popuwindow = new AddPopuwindow(MainActivity.this);
popuwindow.showPopuwindow(mBtnAdd);
}
});
3、布局文件(图片):
4、结语
因为小弟第一次写技术类文章,还有排版什么的,不太熟悉,所以请各位看官多多见谅,请各位轻点打脸。