Android自定义弹窗

发布时间 2023-07-21 13:55:27作者: 邢帅杰
继承android.app.AlertDialog
package com.jay.component;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;

import com.jay.myappstudy.R;

/**
 * 弹窗显示图片
 * */
public class AlertDialogImg extends android.app.AlertDialog {
    private Context context;
    private ImageView mImgView;
    // 图片
    private Bitmap mImg;
    // 底部按钮
    private Button btn1;
    // 当前 AlertDialogImg 实例
    private AlertDialogImg This = null;
    // 传入自定义按钮事件
    private OnClickListener mPositiveOnClick;

    public AlertDialogImg(Context context, Bitmap img) {
        super(context);
        OnCreate(context, img);
    }

    private void OnCreate(Context context, Bitmap img) {
        try {
            This = this;
            this.context = context;
            this.setCanceledOnTouchOutside(true);// 点击空白处关闭弹窗
            mImg = img;
            This.show();// 显示弹窗
            Window window = This.getWindow();// 获取窗口对象
            window.setContentView(R.layout.alert_dialog_img);// 加载布局文件
            mImgView = (ImageView) window.findViewById(R.id.img);// 获取布局文件中的控件
            if (mImgView != null) {
                mImgView.setImageBitmap(mImg);// 设置控件
            }
            btn1 = (Button) window.findViewById(R.id.btn1);// 获取按钮
            // 按钮点击事件
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 自定义按钮事件
                    if (mPositiveOnClick != null) {
                        mPositiveOnClick.onClick(This, 0);
                    }
                    // 关闭弹窗
                    This.dismiss();
                }
            });
        } catch (Exception ex) {
            Log.i("AlertDialogImg", "弹窗异常", ex);
            System.out.println(ex.getMessage());
        }
    }
    // 弹窗对象实例调用,可修改图片。
    public void setImg(Bitmap img) {
        mImgView.setImageBitmap(img);
    }

    // 弹窗对象实例调用,可修改图片。
    public void setPositiveButton(String text, final OnClickListener listener) {
        mPositiveOnClick = listener;
        btn1.setText(text);
    }
}

使用

// 生成二维码
Bitmap qrCode = QRCodeUtils.createQRCode("http://www.baidu.com", 200);
// 弹窗,一定要传Activity,弹窗是要基于Activity的。
AlertDialogImg dlg = new AlertDialogImg(currentActivity, qrCode);
// 设置弹窗底部按钮和点击事件,自定义继承View.OnClickListener
dlg.setPositiveButton("确定", null);

参考:https://blog.csdn.net/willba/article/details/92613902
https://zhuanlan.zhihu.com/p/619213902?utm_id=0