android的popupwindow和dialog类似,不过比dialog比较灵活。
PopupWindow popupWindowForVoice=null;
//定义一个xml布局,加载
View view = getLayoutInflater().inflate( R.layout.popwindow_recorder_voice, null, false); //初始化布局控件 initRecoderView(view); if (popupWindowForVoice != null) { popupWindowForVoice = null; } //实例化 popupWindowForVoice = new PopupWindow(view, 500, 500, true); //设置弹窗外背景透明度 backgroundWindow(0.2f); //设置弹窗位置,这里需要绑定一个控件id popupWindowForVoice.showAtLocation(webView, Gravity.CENTER, 0, 0); //设置点击监听 view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (popupWindowForVoice != null && popupWindowForVoice.isShowing()) { popupWindowForVoice.dismiss(); backgroundWindow(1f); popupWindowForVoice = null; } return false; } }); //设置弹窗消失 popupWindowForVoice.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { // 改变显示的按钮图片为正常状态 popupWindowForVoice.dismiss(); backgroundWindow(1f); popupWindowForVoice = null; } });// 设置背景颜色变暗 public void backgroundWindow(float bgAlpha) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = bgAlpha; getWindow().setAttributes(lp); }
-----------
自定义Popupwindow基类public abstract class BaseDialog extends Dialog { private Context context; //下面三个定义的跟上面讲得就是一样的啦 private String title; public OnItemClickListener onItemClickListener; protected View view; //看到这里我们定义的就清楚,我们也是借用view这个父类来引入布局的 public BaseDialog(Context context) { super(context); this.context=context; } public BaseDialog(Context context, int themeResId) { super(context, themeResId); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); } public void setTitle(String title) { this.title = title; } public String getTitle() { return title; } public void setOnItemCheckListener(OnItemClickListener onItemCheckListener) { if (onItemCheckListener != null) this.onItemClickListener = onItemCheckListener; } protected void init() { //以view来引入布局 View view = LayoutInflater.from(context).inflate(getLayoutId(), null); this.view=view; setContentView(view); //设置dialog大小 Window dialogWindow = getWindow(); WindowManager manager = ((Activity) context).getWindowManager(); // WindowManager.LayoutParams params = dialogWindow.getAttributes(); // 获取对话框当前的参数值 WindowManager.LayoutParams params =new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); dialogWindow.setGravity(Gravity.BOTTOM); Display d = manager.getDefaultDisplay(); // 获取屏幕宽、高度 params.width = (int) (d.getWidth() * 0.8); // 宽度设置为屏幕的0.65,根据实际情况调整 dialogWindow.setAttributes(params); } //可以看到这里定义了一个抽象方法,这个将交由子类去实现 public abstract int getLayoutId(); }