Dialog八种基础对话框

一、简单的入门对话框

activity_main.xml

<?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:orientation="vertical"
    android:padding="10dp">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="普通对话框1"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="普通对话框2"
        android:onClick="onClick"
        />
</LinearLayout>

MainActivity.java

package com.administrator.dialogtest;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn1);
        Button btn2 = findViewById(R.id.btn2);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                showNormalDialog();
                break;
            case R.id.btn2:
                showNormalDialog2();
        }
    }

    private void showNormalDialog2() {
        AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.setTitle("提示");//这个是无返回值方法,所以不能像第一个按钮那样一直.set下去
        dialog.setMessage("请为本次课堂打分");
        //5 3 1
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "1分", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this,"您选择了:5分",Toast.LENGTH_SHORT).show();
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "5分", new DialogInterface.OnClickListener() {//这个不能传null,因为null不知道是空的Message对象还是空的OnClickListener对象
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "3分", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        //一定要调用show方法,否则对话框不展示
        dialog.show();
    }

    private void showNormalDialog() {
        //AlertDialog
        //AlerDialog的构造方法是被修饰为protected
        //因此包外是无法访问的,所以我们利用构造器
//        AlertDialog dialog = new AlertDialog(this);//因为方法定义时候定义了受保护的,因此要使用构造器
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
//        builder.setTitle("提示").setMessage("你好").setPositiveButton()//因为每个方法的返回值都是一个builder,所以可以这样写
        //设置对话框的标题
        builder.setTitle("提示");
        //设置内容
        builder.setMessage("你是否确定退出当前程序");
        //设置按钮
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //退出当前程序
                MainActivity.this.finish();
            }
        });
        builder.setNegativeButton("取消",null);//可以像上面确定按钮这样传点击事件,什么都不给为null
//        builder.setNeutralButton();
        //创建对话框
//        builder.create();
        //对话框的展示方法
        builder.show();//show()方法里面写了create()方法,因此不需要额外多写一次
    }
}


二、列表对话框和单选对话框

activity_main.xml

<?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:orientation="vertical"
    android:padding="10dp">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="列表对话框"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="单选对话框"
        android:onClick="onClick"
        />
</LinearLayout>

MainActivity.java

package com.administrator.dialogtest;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn1);
        Button btn2 = findViewById(R.id.btn2);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                showListDialog();
                break;
            case R.id.btn2:
                showSingleDialog();
        }
    }

    /**
     * 单选对话框
     */
//    int idx = 0;
    private void showSingleDialog() {
        final String[] stars={"老周","老牛","老孙","老","写不下去了"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("请选择你喜欢的明星")
                //参数1:选项
                //参数2:默认被选项,传某个选项的索引
                //参数3:被选中时的事件
                .setSingleChoiceItems(stars, 0, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
//                        idx = which;
                        Toast.makeText(MainActivity.this,"您最喜欢的明星是:"+ stars[which],Toast.LENGTH_SHORT).show();
                    }
//                }).setPositiveButton("确定",null);//如果需要点击某个按钮后消失,这样设置
//                }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
//                    @Override
//                    public void onClick(DialogInterface dialog, int which) {//这里的which和上面的不是同一个,所以要解决上面的传递下来的问题,定义一个全局变量
//                        Toast.makeText(MainActivity.this, "您选择了:" + stars[idx], Toast.LENGTH_SHORT).show();
//                    }
//                });
                });
        builder.show();
    }

    /**
     * 列表对话框
     */
    private void showListDialog() {
        final String[] items = {"我是1","我是2","我是3","我是4"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("请选择:")
                //设置列表项
                .setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {//参数2:被点击项的索引
                        Toast.makeText(MainActivity.this, "您选择了:" + items[which], Toast.LENGTH_SHORT).show();
                    }
                });
        builder.show();
    }
}

三、多选对话框和等待对话框

activity_main.xml

<?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:orientation="vertical"
    android:padding="10dp">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="多选对话框"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="等待对话框"
        android:onClick="onClick"
        />
</LinearLayout>

MainActivity.java

package com.administrator.dialogtest;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn1);
        Button btn2 = findViewById(R.id.btn2);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                showMultiDialog();
                break;
            case R.id.btn2:
                showWaitingDialog();
        }
    }



    /**
     * 多选对话框
     */
    private void showMultiDialog() {
        final String[] sports = {"篮球","网球","乒乓球","曲棍球","滑板","游泳"};
        final boolean[] checked = {true,false,true,true,false,false};
        AlertDialog.Builder builder =new AlertDialog.Builder(this)
                .setTitle("你最喜欢的运动")
                //参数1:选项
                //参数2:默认备选项(true:选中,false:未选择)
                //参数3:被选中时触发的事项
                .setMultiChoiceItems(sports,checked , new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            //参数1:对话框本身
                            //参数2:按钮的索引
                            //参数3:标志按钮是否处于被选中true(选中)false(取消选中)
                            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                                //无论是选中还是取消选择,都会触发onclick方法
                                //根据which数组下标,将isChecked的选中状态保存到数组checked
//                                checked[which]=isChecked;//这个方法默认把这步做了。所以不需要再写
                                Log.e("Log", sports[which]);
                            }
                        }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                String msg="你的爱好是:";
                                for (int i = 0;i<checked.length;i++){
                                    if(checked[i]){
                                        msg += sports[i] + " ";//遍历刚才上面保存的选中状态的数组
                                    }
                                }
                                Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
                            }
                });
//                });
        builder.show();
    }

    /**
     * 等待对话框
     */
    private void showWaitingDialog() {
        //进度对话框,默认样式就是转圈
        ProgressDialog dialog = new ProgressDialog(this);
        dialog.setTitle("我是一个等待对话框");
        dialog.setMessage("请等待...");
//        dialog.setCancelable(false);//设置是否也取消,默认是true可取消
//        dialog.dismiss();//设置对话框消失
        dialog.show();
    }
}

四、进度条对话框和输入对话框

activity_main.xml

<?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:orientation="vertical"
    android:padding="10dp">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="进度条对话框"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="输入对话框"
        android:onClick="onClick"
        />
</LinearLayout>

MainActivity.java

package com.administrator.dialogtest;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn1);
        Button btn2 = findViewById(R.id.btn2);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                showProgressDialog();
                break;
            case R.id.btn2:
                showInputDialog();
        }
    }

    /**
     * 进度条对话框
     */
    private void showProgressDialog() {
        final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setTitle("下载中...");
        dialog.setMessage("请等待");
        dialog.setIndeterminate(false);//设置进度条模糊,感觉进度条在动,true是循环动
        //设置对话框的样式为水平样式
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//        dialog.setProgress(40);//设置进度
        new Thread(){
            public void run(){
                super.run();
                //让进度条从1到100运动
                for(int i =1;i<=100;i++){
                    dialog.setProgress(i);
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                dialog.dismiss();
            }
        }.start();
        dialog.show();
    }

    /**
     * 输入对话框
     */
    private void showInputDialog() {
        final EditText editText = new EditText(this);
        AlertDialog.Builder builder = new AlertDialog.Builder(this)
                .setTitle("提示")
                .setView(editText)//需要传一个布局或一个View视图,也可以在资源文件夹中新建一个布局引进来
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"您输入的是:"+editText.getText().toString(),Toast.LENGTH_SHORT).show();
                    }
                });
        builder.show();
    }
}



猜你喜欢

转载自blog.csdn.net/weimeig/article/details/79713055