AlertDialog弹窗的六种创建方式【包括工具类】

 AlertDialog的六种创建方式

创建AlertDialog的步骤:

  1、创建AlertDialog.Builder对象

  2、调用Builder对象的setTitle方法设置标题,setIcon方法设置图标

  3、调用Builder相关方法如setMessage方法、setItems方法、setSingleChoiceItems方法、setMultiChoiceItems方法、setAdapter方法、setView方法设置不同类型的对话框内容。

  4、调用setPositiveButton、setNegativeButton、setNeutralButton设置多个按钮

  5、调用Builder对象的create()方法创建AlertDialog对象

  6、调用AlertDialog对象的show()方法将对话框显示出来


 使用方法注意:

setCancelable(false)  点击返回键其他空白区域是否弹窗消失【false 不消失,true消失;默认true】

一、setMessage:设置对话框内容为简单文本内容

// 创建构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // 设置参数
        builder.setTitle("请做出选择").setIcon(R.drawable.ic_launcher)
                .setMessage("我美不美")
                .setPositiveButton("美", new OnClickListener() {// 积极

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                                Toast.makeText(MainActivity.this, "恭喜你答对了", 0)
                                        .show();
                            }
                        }).setNegativeButton("不美", new OnClickListener() {// 消极

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                                Toast.makeText(MainActivity.this, "一点也不老实", 0)
                                        .show();
                            }
                        }).setNeutralButton("不知道", new OnClickListener() {// 中间级

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                                Toast.makeText(MainActivity.this, "快睁开眼瞅瞅", 0)
                                        .show();
                            }
                        });
        builder.create().show();

二、setItem:设置文本框内容为简单列表项

// 创建数据
        final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
        // 创建对话框构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // 设置参数
        builder.setIcon(R.drawable.ic_launcher).setTitle("提示")
                .setItems(items, new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, items[which],
                                Toast.LENGTH_SHORT).show();
                    }
                });
        builder.create().show();

三、setSingleChoiceItems()设置对话框内容为单选列表项

// 创建数据
        final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
        // 创建对话框构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // 设置参数
        builder.setIcon(R.drawable.ic_launcher).setTitle("提示")
                .setSingleChoiceItems(items, 0, new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity.this, items[which],
                                Toast.LENGTH_SHORT).show();
                    }
                });
        builder.create().show();

四、setMultiChoiceItems()设置对话框内容为多选项列表

// 创建数据
        final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
        // 创建对话框构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.ic_launcher)
                .setTitle("提示")
                .setMultiChoiceItems(items,
                        new boolean[] { true, true, false, false, false },
                        new OnMultiChoiceClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which, boolean isChecked) {
                                // TODO Auto-generated method stub
                                if (isChecked) {
                                    Toast.makeText(MainActivity.this,
                                            items[which], 0).show();
                                }
                            }
                        });
        builder.create().show();

五、setAdapter()设置对话框内容为自定义列表项(这里是一个布局)

// 创建数据
        final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
        // 创建对话框构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("提示")
                .setIcon(R.drawable.ic_launcher)
                .setAdapter(
                        new ArrayAdapter<String>(MainActivity.this,
                                R.layout.item, R.id.tv, items),
                        new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                                Toast.makeText(MainActivity.this, items[which],
                                        0).show();
                            }
                        });
        builder.create().show();

六、setView()设置对话框为自定义View

// 创建对话框构建器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // 获取布局
        View view2 = View.inflate(MainActivity.this, R.layout.login, null);
        // 获取布局中的控件
        final EditText username = (EditText) view2.findViewById(R.id.username);
        final EditText password = (EditText) view2.findViewById(R.id.password);
        final Button button = (Button) view2.findViewById(R.id.btn_login);
        // 设置参数
        builder.setTitle("Login").setIcon(R.drawable.ic_launcher)
                .setView(view2);
        // 创建对话框
        final AlertDialog alertDialog = builder.create();
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String uname = username.getText().toString().trim();
                String psd = password.getText().toString().trim();
                if (uname.equals("shenhua") && psd.equals("123456")) {
                    Toast.makeText(MainActivity.this, "登录成功", 0).show();
                }
                Toast.makeText(MainActivity.this, "登录失败", 0).show();
                alertDialog.dismiss();// 对话框消失
            }

        });
        alertDialog.show();


重点来了,这是工具类

/**
 * 各种dialog
 */
public class DialogUtil {

    /***
     * 创建单选对话框
     *
     */
    public static Dialog createSingleSelectionDialog(Context context, String title,
                                                     String[] datas, DialogInterface.OnClickListener linister) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        if (!TextUtils.isEmpty(title)) {
            builder.setTitle(title);
        } else {
            builder.setTitle("温馨提示");
        }
        builder.setItems(datas, linister);
        Dialog dialog = builder.create();
        builder.show();
        return dialog;
    }

    /***
     * 创建对话框
     *
     */
    public static Dialog createMessageDialog(Context context, String title,
                                             String data, DialogInterface.OnClickListener linister) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        if (!TextUtils.isEmpty(title)) {
            builder.setTitle(title);
        } else {
            builder.setTitle("温馨提示");
        }
        builder.setMessage(data);
        Dialog dialog = builder.create();
        builder.show();
        return dialog;
    }


    /**
     * 确定框
     */
    public static Dialog createNoticeDialog(Context context, String title, String message,
                                            DialogInterface.OnClickListener linister) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title).setMessage(message).setPositiveButton("确定", linister);
        Dialog dialog = builder.create();
        builder.show();
        return dialog;

    }

    /**
     * 加载框
     */
    public static Dialog loadingDialog(Context context, String message) {
        AlertDialog dialog = new SpotsDialog.Builder().setContext(context).setMessage(message).build();
        dialog.show();
        return dialog;

    }

    /**
     * 树形
     */
    public static Dialog TreeItemDialog(Context context, String title, TreeItemDialog.PriorityListener listener) {
        AlertDialog dialog = new TreeItemDialog.Builder().setContext(context).setMessage(title).setPriorityListener(listener).build();
        dialog.show();
        return dialog;
    }

}
使用:

Dialog dialog = DialogUtil.loadingDialog(context, "加载中");

工具列里面用到的自定义类

/**
 * 加载框
 */
public class SpotsDialog extends AlertDialog {

    public static class Builder {

        private Context context;
        private String message;
        private int messageId;
        private int themeId;
        private boolean cancelable = true; // default dialog behaviour
        private OnCancelListener cancelListener;

        public Builder setContext(Context context) {
            this.context = context;
            return this;
        }

        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }

        public Builder setMessage(int messageId) {
            this.messageId = messageId;
            return this;
        }

        public Builder setTheme(int themeId) {
            this.themeId = themeId;
            return this;
        }

        public Builder setCancelable(boolean cancelable) {
            this.cancelable = cancelable;
            return this;
        }

        public Builder setCancelListener(OnCancelListener cancelListener) {
            this.cancelListener = cancelListener;
            return this;
        }

        public AlertDialog build() {
            return new SpotsDialog(
                    context,
                    messageId != 0 ? context.getString(messageId) : message,
                    themeId != 0 ? themeId : R.style.SpotsDialogDefault,
                    cancelable,
                    cancelListener
            );
        }
    }

    private static final int DELAY = 150;
    private static final int DURATION = 1500;

    private int size;
    private AnimatedView[] spots;
    private AnimatorPlayer animator;
    private CharSequence message;

    private SpotsDialog(Context context, String message, int theme, boolean cancelable, OnCancelListener cancelListener) {
        super(context, theme);
        this.message = message;

        setCancelable(cancelable);
        if (cancelListener != null) {
            setOnCancelListener(cancelListener);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dmax_spots_dialog);
        setCanceledOnTouchOutside(false);

        initMessage();
        initProgress();
    }

    @Override
    protected void onStart() {
        super.onStart();

        for (AnimatedView view : spots) {
            view.setVisibility(View.VISIBLE);
        }

        animator = new AnimatorPlayer(createAnimations());
        animator.play();
    }

    @Override
    protected void onStop() {
        super.onStop();

        animator.stop();
    }

    @Override
    public void setMessage(CharSequence message) {
        this.message = message;
        if (isShowing()) {
            initMessage();
        }
    }

    //~

    private void initMessage() {
        if (message != null && message.length() > 0) {
            ((TextView) findViewById(R.id.dmax_spots_title)).setText(message);
        }
    }

    private void initProgress() {
        ProgressLayout progress = (ProgressLayout) findViewById(R.id.dmax_spots_progress);
        size = progress.getSpotsCount();

        spots = new AnimatedView[size];
        int size = getContext().getResources().getDimensionPixelSize(R.dimen.spot_size);
        int progressWidth = getContext().getResources().getDimensionPixelSize(R.dimen.progress_width);
        for (int i = 0; i < spots.length; i++) {
            AnimatedView v = new AnimatedView(getContext());
            v.setBackgroundResource(R.drawable.dmax_spots_spot);
            v.setTarget(progressWidth);
            v.setXFactor(-1f);
            v.setVisibility(View.INVISIBLE);
            progress.addView(v, size, size);
            spots[i] = v;
        }
    }

    private Animator[] createAnimations() {
        Animator[] animators = new Animator[size];
        for (int i = 0; i < spots.length; i++) {
            Animator move = ObjectAnimator.ofFloat(spots[i], "xFactor", 0, 1);
            move.setDuration(DURATION);
            move.setInterpolator(new HesitateInterpolator());
            move.setStartDelay(DELAY * i);
            animators[i] = move;
        }
        return animators;
    }
}

/**
 * 树形
 */
public class TreeItemDialog extends AlertDialog {

    private Map<String, String> data;
    private Map<String, String> childData;
    private Context context;
    private String message;
    private PriorityListener listener;
    private String deptId;
    private String deptIdName;
    private AndroidTreeView tView;
    private TreeNode root;
    private RelativeLayout contentView;
    private TreeNode node1;
    private TreeNode.TreeNodeClickListener nodeClickListener;

    private ImageView iv_fr_search;
    private String text;
    private RecyclerView rv_search_result;

    public static class Builder {

        private Context context;
        private String message;
        private PriorityListener listener;

        private OnCancelListener cancelListener;

        public Builder setContext(Context context) {
            this.context = context;
            return this;
        }

        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }

        public Builder setPriorityListener(PriorityListener listener) {
            this.listener = listener;
            return this;
        }

        public AlertDialog build() {
            return new TreeItemDialog(context, message, listener);
        }
    }

    protected TreeItemDialog(Context context, String message, TreeItemDialog.PriorityListener listener) {
        super(context);
        this.context = context;
        this.message = message;
        this.listener = listener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tree_item_dialog);
        setCanceledOnTouchOutside(false);
        initData();
    }

    public void initData() {
        data = DicDataCache.get().getAjlb();
        childData = DicDataCache.get().getAjlbxj();
        iv_fr_search = ((ImageView) findViewById(R.id.iv_fr_search));
        rv_search_result = ((RecyclerView) findViewById(R.id.rv_search_result));
        contentView = (RelativeLayout) findViewById(R.id.rt_tree_item);
        ((TextView) findViewById(R.id.rt_tree_item_title)).setText(message);
        TreeNodeAdapter.IconTreeItem nodeItem = new TreeNodeAdapter.IconTreeItem();
        root = new TreeNode(nodeItem).setViewHolder(new TreeNodeAdapter(context));
        for (Map.Entry<String, String> map : data.entrySet()) {
            String par = map.getKey().substring(0, 2);
            String parLastFour = map.getKey().substring(2, 6);
            TreeNode parent;
            if (parLastFour.equals("0000")) {
                parent = new TreeNode(new TreeNodeAdapter.IconTreeItem(map.getValue(), map.getKey(), "1", "0"));
            } else {
                parent = new TreeNode(new TreeNodeAdapter.IconTreeItem(map.getValue(), map.getKey(), "0", "0"));
            }
            root.addChild(parent);
        }

        tView = new AndroidTreeView(context, root);
        nodeClickListener = new TreeNode.TreeNodeClickListener() {
            @Override
            public void onClick(TreeNode node, Object value) {
                node1 = node;
                deptId = ((TreeNodeAdapter.IconTreeItem) value).code;
                String isParent = ((TreeNodeAdapter.IconTreeItem) value).isParent;
                deptIdName = ((TreeNodeAdapter.IconTreeItem) value).text;
                String isPeople = ((TreeNodeAdapter.IconTreeItem) value).isPeople;
                if (isParent.equals("1") && !isPeople.equals("1")) {
                    String par = deptId.substring(0, 2);
                    String parLastFour = deptId.substring(2, 6);
                    if (parLastFour.equals("0000")) {
                        for (Map.Entry<String, String> map : childData.entrySet()) {
                            if (par.equals(map.getKey().substring(0, 2))) {
                                TreeNode parent = new TreeNode(new TreeNodeAdapter.IconTreeItem(map.getValue(), map.getKey(), "1", "1"));
                                node1.addChild(parent);
                            }
                        }
                    }
                }
                if (node1.getChildren() == null || node1.getChildren().size() == 0) {
                    listener.refreshPriorityUI(deptIdName, deptId);
                }
            }
        };
        tView.setDefaultAnimation(true);
        tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom);
        tView.setDefaultViewHolder(TreeNodeAdapter.class);
        tView.setDefaultNodeClickListener(nodeClickListener);

        contentView.addView(tView.getView());
    }

    public interface PriorityListener {
        public void refreshPriorityUI(String name, String code);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值