继承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);

方式2:

                    // 创建一个 dialogView 弹窗
                    android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(currentActivity);
                    final android.app.AlertDialog dialog = builder.create();
                    // 加载布局文件
                    View dialogView = dialogView = View.inflate(curAct, R.layout.alert_dialog_img, null);
                    // 设置布局文件
                    dialog.setView(dialogView);
                    dialog.setCanceledOnTouchOutside(true);// 点击空白处关闭弹窗
                    dialog.show();// 显示弹窗
                    // 获取布局中的控件
                    ImageView img = (ImageView) dialogView.findViewById(R.id.img);
                    img.setImageBitmap(qrCode);
                    Button btn1 = (Button) dialogView.findViewById(R.id.btn1);// 获取按钮
                    btn1.setText("OK");
                    btn1.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            dialog.dismiss();// 关闭弹窗
                        }
                    });

布局文件:必须嵌套一个LinearLayout,否则没法自定义弹窗的宽高

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:layout_marginLeft="0px"
    android:layout_marginRight="0px"
    android:background="@drawable/bgWhite"
    android:orientation="vertical">
    <!--必须嵌套一个LinearLayout,否则不能自定义弹窗的宽高-->
    <LinearLayout
        android:layout_width="@dimen/alert_width"
        android:layout_height="@dimen/alert_height"
        android:orientation="vertical">

        <!--内容区域-->

    </LinearLayout>
</LinearLayout>

自定义弹窗宽高,此段代码必须放到 dialog.show()的后面

//获取dialog布局
        WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
        //获取屏幕的宽高
        Point point = new Point();
        Display display = currentActivity.getWindowManager().getDefaultDisplay();
        display.getSize(point);
        //给dialog设置宽高
        params.width = getResources().getDimensionPixelSize(R.dimen.alert_width);
        params.height = getResources().getDimensionPixelSize(R.dimen.alert_height);//(int) (point.y * 0.3);
        //使设置生效
        dialog.getWindow().setAttributes(params);

设置弹窗的位置:
int matchParent = ViewGroup.LayoutParams.MATCH_PARENT;//父布局的宽度
params.x = matchParent;
params.y = getResources().getDimensionPixelSize(R.dimen.alert_marginTop);// 距离顶部距离
参考:https://blog.csdn.net/willba/article/details/92613902
https://zhuanlan.zhihu.com/p/619213902?utm_id=0
自定义宽高:https://www.cnblogs.com/buqzl/p/9830556.html

posted on 2023-07-21 13:49  邢帅杰  阅读(348)  评论(0编辑  收藏  举报