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