Android PopupWindow弹出实现

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();

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值