美文网首页
自定义AlertDialog的宽度

自定义AlertDialog的宽度

作者: 编程的猫 | 来源:发表于2019-04-26 12:01 被阅读0次

下面简单记录下,要改变alertDialog的宽度,重点是在改变该dialog宿主Activity的宽度,下面粘贴一个示例

效果图

image.png
public class MyDialogUtil {
    private static MyDialogUtil sMyDialogUtil;

    public static MyDialogUtil getInstance() {
        if (sMyDialogUtil == null) {
            synchronized (MyDialogUtil.class) {
                if (sMyDialogUtil == null) {
                    sMyDialogUtil = new MyDialogUtil();
                }
            }
        }
        return sMyDialogUtil;
    }

    private static DialogCallBack mDialogCallBack;

    public MyDialogUtil setDialogCallBack(DialogCallBack dialogCallBack) {
        mDialogCallBack = dialogCallBack;
        return this;
    }

    public void showPermissionDialog(Context context, String permissionTip) {
        AlertDialog alertDialog = new AlertDialog.Builder(context)
                .setMessage(permissionTip)
                .setPositiveButton(context.getString(R.string.resume), (dialog, which) -> {
                    //确定,调用确定的回调
                    if (mDialogCallBack != null) {
                        mDialogCallBack.positiveClick(dialog);
                    }
                    dialog.dismiss();
                })
                .setNegativeButton(context.getString(R.string.cancel), (dialog, which) -> {
                    if (mDialogCallBack != null) {
                        mDialogCallBack.negativeClick(dialog);
                    }
                    dialog.dismiss();
                    //退出应用
                    //activity.onBackPressed();
                })
                .create();
        alertDialog.show();
    }

    //展示权限的对话框
    public static void showPermissionAlert(Activity activity, Context context, String tips, View view,
                                           int res, boolean touchCancel, DialogActCallBack callBack) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.dialogTheme);
        AlertDialog alertDialog = builder.create();
        alertDialog.setView(view);
        Window window = alertDialog.getWindow();
        if (window != null) {
            window.getDecorView().setPadding(0, 0, 0, 0);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                window.getDecorView().setBackground(context.getResources().getDrawable(res));
            }
            WindowManager manager = activity.getWindowManager();
            Display display = manager.getDefaultDisplay();
            android.view.WindowManager.LayoutParams lp = alertDialog.getWindow()
                    .getAttributes();
            lp.gravity = Gravity.CENTER;
            lp.width = display.getWidth() * 4 / 5;
            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            alertDialog.getWindow().setAttributes(lp);
            alertDialog.setCancelable(touchCancel);
            alertDialog.setCanceledOnTouchOutside(touchCancel);
            window.setWindowAnimations(R.style.alertDialogStyle01);
        }
        //设置window动画

        TextView init_permissions_tv = view.findViewById(R.id.init_permissions_tv);
        Button pushOutAppBtn = view.findViewById(R.id.pushOutAppBtn);
        Button agreeBtn = view.findViewById(R.id.agreeBtn);
        if (!TextUtils.isEmpty(tips)) {
            init_permissions_tv.setText(tips);
        }
        pushOutAppBtn.setOnClickListener(view1 -> {
            if (callBack != null) {
                callBack.cancelActCallBack(alertDialog);
            }
        });
        agreeBtn.setOnClickListener(view1 -> {
            if (callBack != null) {
                callBack.positionActCallBack(alertDialog);
            }
        });
        alertDialog.show();
    }
}

使用示例

 MyDialogUtil.showPermissionAlert(PermissionActivity.this,PermissionActivity.this,
                "",view,R.drawable.dialog_bg,false, new DialogActCallBack() {
                    @Override
                    public void cancelActCallBack(AlertDialog alertDialog) {
                        alertDialog.dismiss();
                        MyActivityManager.getMyActivityManager().removeAllAct();
                    }

                    @Override
                    public void positionActCallBack(AlertDialog alertDialog) {
                        //再次申请权限
                        requestPermissions(pers);
                        alertDialog.dismiss();
                    }
                });

需要的可以在进行链式封装,这里仅作为示例

相关文章

网友评论

      本文标题:自定义AlertDialog的宽度

      本文链接:https://www.haomeiwen.com/subject/dgjfnqtx.html