Android中AlertDialog的使用

AlertDialog的简单使用

  AlertDialog的使用是依赖于Activity的。它不同于Toast,Toast是不依赖于Activity的,Toast只起到一种提示作用,并无法进行交互。而AlertDialog是可以进行交互的,不仅可以起到提示作用,还可以用来进行选择等,下面我们来看看它的用法。
  
  我们通过一个按键的点击来触发AlertDialog:

        //首先创建一个AlertDialog.Builder的对象。
        AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
        //设置图片
        builder.setIcon(R.mipmap.ic_launcher);
        //设置题目
        builder.setTitle("Title");
        //设置内容
        builder.setMessage("This is a Dialog!");
        //设置按键NegativeButton(在最左边)
        builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getApplicationContext(), "NegativeButton", Toast.LENGTH_SHORT).show();
            }
        });
        //设置按键NeutralButton(在中间)
        builder.setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getApplicationContext(), "NeutralButton", Toast.LENGTH_SHORT).show();
            }
        });
        //设置按键PositiveButton(在最右边)
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getApplicationContext(), "PositiveButton", Toast.LENGTH_SHORT).show();
            }
        });
        //创建AlertDialog 对象。
        AlertDialog dialog =builder.create();
        //调用show()方法显示。
        dialog.show();

这里写图片描述

选择型的AlertDialog

  
  通过弹出AlertDialog,在AlertDialog中选择想要的内容,点击后直接退出AlertDialog。

        //首先创建一个AlertDialog.Builder的对象。
        AlertDialog.Builder builder =new AlertDialog.Builder(DialogActivity.this);
        //设置题目
        builder.setTitle("Title");
        //设置选择的内容:第一个参数是数据, 第二个参数是点击事件。
        builder.setItems(mData, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getApplicationContext(), "点击第" + (i + 1) + "数据", Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog dialog =builder.create();
        dialog.show();

数据设置为:

private String[] mData={"This is Item1", "This is Item2", "This is Item3", "This is Item4"};

这里写图片描述

单选择的AlertDialog

  通过弹出AlertDialog,在AlertDialog中选择想要的内容,点击定义的NegativeButton,NeutralButton或者PositiveButton按钮后退出,我们可以通过在NeutralButton或者PositiveButton按钮中定义相关操作提交数据,NegativeButton则是不对数据做处理直接退出。注意:单选择的AlertDialog只能选择一项。
  

        AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
        builder.setTitle("Title");
        //设置单选则的选项
        builder.setSingleChoiceItems(mSexs, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which) {
                mSex = mSexs[which];
                Toast.makeText(getApplicationContext(), "您选择的性别是" + mSexs[which], Toast.LENGTH_SHORT).show();

            }
        });
        //取消按钮,点击后不对数据做处理。
        builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {


            }
        });
        //确定按钮,点击后将数据显示在EditText中。
        builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                mEditTextSex.setText(mSex);
            }
        });
        builder.show();

补充数据定义:

    private String[] mSexs={"男", "女", "其他"};
    private String mSex;

这里写图片描述

多选择的AlertDialog

  通过弹出AlertDialog,在AlertDialog中选择想要的内容,点击定义的NegativeButton,NeutralButton或者PositiveButton按钮后退出,我们可以通过在NeutralButton或者PositiveButton按钮中定义相关操作提交数据,NegativeButton则是不对数据做处理直接退出。注意:多选择的AlertDialog可以选择多项。
  

AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
        builder.setTitle("Title");
        //设置多选择项。
        builder.setMultiChoiceItems(mHobby, mIsCheckedManager, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which, boolean isChecked) {
                mIsCheckedManager[which] = isChecked;

            }
        });
        builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {


            }
        });
        builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which) {
                hobby = new StringBuffer();
                for (int i=0; i<mHobby.length; i++){

                    if(mIsCheckedManager[i]){
                        hobby.append(mHobby[i]);
                    }
                }
                mEditTextHobby.setText(hobby);
            }
        });
        builder.show();

补充数据定义:

     private String[] mHobby={"唱歌", "学习", "读书", "打篮球", "跑步", "运动"};
    private boolean[] mIsCheckedManager=new boolean[mHobby.length];
    private StringBuffer hobby;

这里写图片描述

自定义AlertDialog

  • 首先定义一个自定义的Dialog的布局。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/dialog_background"
    android:orientation="vertical">

    <Button
        android:id="@+id/button_cancle"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_background"
        android:gravity="left"
        android:padding="10dp"
        android:text="取消" />

    <Button
        android:id="@+id/button_save"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_background"
        android:gravity="left"
        android:padding="10dp"

        android:text="收藏" />

    <Button
        android:id="@+id/button_delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_background"
        android:gravity="left"
        android:padding="10dp"
        android:text="删除" />

</LinearLayout>

布局结果如下:

这里写图片描述

  • 创建Dialog对象,将布局添加到Dialog中。
//定义了一个全局变量,方便使用
private Dialog mMyDialog;
    //自定义的Dialog;
        mMyDialog = new Dialog(DialogActivity.this);
        LayoutInflater inflater = getLayoutInflater();
        View dialogView = inflater.inflate(R.layout.layout_my_dialog, null);
        //将布局添加到Dialog中。
        mMyDialog.setContentView(dialogView);
        mMyDialog.show();
        //设置三个按钮的作用
        Button button_cancle = (Button) dialogView.findViewById(R.id.button_cancle);
        Button button_save = (Button) dialogView.findViewById(R.id.button_save);
        Button button_delete = (Button) dialogView.findViewById(R.id.button_delete);
        //设置取消按钮
        button_cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mMyDialog.dismiss();
            }
        });
        //设置收藏按钮
        button_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(), "收藏成功", Toast.LENGTH_LONG).show();

                mMyDialog.dismiss();
            }
        });
        //设置删除按钮
        button_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show();
                mMyDialog.dismiss();

            }
        });

结果:

这里写图片描述

  可是我们可以看到我们自定义的Dialog中还是包括标题栏,那么我们应该如何去除标题呢?

方法一:我们可以通过添加语句:

//去除标题栏
mMyDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

方法二:我们可以通过定义一个Style:

<style parent="@android:Theme.Dialog" name="NoDialogTitle">

        <item name="android:windowFrame">@null</item>

        <item name="android:windowNoTitle">true</item>

        <item name="android:windowBackground">@android:color/transparent</item>

        <item name="android:windowIsFloating">true</item>

        <item name="android:windowContentOverlay">@null</item>

    </style>

  在创建Dialog对象时调用:

 //自定义的Dialog;
mMyDialog = new Dialog(DialogActivity.this,R.style.NoDialogTitle);
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值