AlertDialog的种类和使用方法

<本文章仅作学习的笔记的目的,可能会有参考冲突与错误,请见谅。>

AlertDialog可以在当前页面里弹出一个对话框,它可以屏蔽其他UI控件的交互能力,以起到警示的作用,所以在实际设计时dialog会作为重要信息提示作用而存在。

dialog有以下几种形式:简单对话框,列表对话框,单选对话框,多选对话框,自定义对话框等。

1.简单对话框

  Button dig=(Button)findViewById(R.id.dig1);
        dig.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //创建Alert builder对象

                dix.setIcon(R.mipmap.ic_launcher); //设置图标

                dix.setTitle("对话框");            //设置标题

                dix.setMessage("这是一个对话框");   //设置内容
                dix.setPositiveButton("进入界面", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                       //在此添加逻辑
                    }
                });                  
                //确定方面事件响应
                dix.setNegativeButton("残忍的离开", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });                      //取消方面事件响应
                dix.show();
                //显示出对话框
            }
        });
    }

步骤具体为:a:创建 AlertDialog.Builder实例
b:设置实例的一些属性
c:设置positive与negetive的监听
d:show(),显示

当显示对话框后整个界面会被屏蔽,UI控件将无法使用。

2.列表对话框

   Button listdialog =(Button)findViewById(R.id.listdialog);
        listdialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组

                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //创建Alert builder对象
                dix.setIcon(R.mipmap.ic_launcher);    //设置图标
                dix.setTitle("选择编程语言");           //设置标题


                dix.setItems(arr, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(Activity14.this,"选择了"+arr[which],Toast.LENGTH_SHORT).show();
                    }
                });   //传入arr,并且设置监听器


                dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });                   //确定方面事件响应
                dix.show();
            }
        });

实现步骤:1.final一个数组作为列表项
2.获取实例(同简单对话框),配置标题,图标等
3.配置ITEM,传入数组,设置监听器,在监听器里设置事件
4.显示对话框

3.单选对话框

   Button singlechoose=(Button)findViewById(R.id.singlechoose);
        singlechoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组
                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //创建Alert builder对象
                dix.setIcon(R.mipmap.ic_launcher);    //设置图标
                dix.setTitle("选择编程语言");           //设置标题
                dix.setSingleChoiceItems(arr, 0, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        selectedId=which;
                        Toast.makeText(Activity14.this,"选择了"+arr[which],Toast.LENGTH_SHORT).show();

                    }
                });
                dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(Activity14.this,"最终选择了"+arr[selectedId],Toast.LENGTH_SHORT).show();
                    }
                });                   //确定方面事件响应
                dix.show();
            }
        });

实现步骤:1.为了记录用户选择,我们需要在最外层添加 private int selectedId=0;
2.获取实例(同简单对话框),配置标题,图标等
3.配置singlechoiceitems,传入数组,设置默认选择为数组第0项,设置监听器,在监听器里设置事件
4.我们用int变量记录下最终的选择,传递给确定按钮
5.显示对话框

4.多选对话框

  Button chooses=(Button)findViewById(R.id.chooses);
        chooses.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组
                chooselist.clear();
                AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);
                //创建Alert builder对象
                dix.setIcon(R.mipmap.ic_launcher);    //设置图标
                dix.setTitle("选择编程语言");           //设置标题
                dix.setMultiChoiceItems(arr, new boolean[]{false, false, false,false, false, false}, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    if(isChecked){
                        chooselist.add(which);
                    }
                        else{
                        chooselist.remove(which);
                    }
                        Toast.makeText(Activity14.this,"用户的选择"+chooselist.toString(),Toast.LENGTH_SHORT).show();
                    }
                });     //设置多选,传入数组,默认选择值,是否选中的逻辑  (如果选中,在数组里添加选项,如果没选中就移除选项)
                dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                                      //最后的toast提示,使用了tostring方法。
                        Toast.makeText(Activity14.this,"最终选择了"+chooselist.toString(),Toast.LENGTH_SHORT).show();
                    }
                });                   //确定方面事件响应
                dix.show();
            }
        });

实现步骤:1.为了记录用户选择,我们需要在代码开始添加 ArrayList chooselist=new ArrayList()用来储存用户选项;
2.获取实例(同简单对话框),配置标题,图标等
3.配置setMultiChoiceItems,传入数组,设置默认选择为全部false,设置监听器,在监听器里设置事件,监听器里的ischecked用来做判断
如果选中,则在数组里动态添加,如果没选中,则移除。
4.使用tostring方法提示选择。
5.显示对话框

5.自定义对话框

  Java代码
   public void bteClick(View v)
    {
        LayoutInflater layoutInflater=LayoutInflater.from(this);    //设置反射器
        View my=layoutInflater.inflate(R.layout.layout_myself_dialog,null);
        //创建反射器视图my,(采用了反射器的inflate方法)
        AlertDialog.Builder builder=new AlertDialog.Builder(this);
        //创建对话框实例
        builder.setView(my);
        //设置好视图
        my.findViewById(R.id.btx).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
            }
        });

        my.findViewById(R.id.btx2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
            }
        });
        //获取按钮对象,设置监听
        dia=builder.create();    //显示出来
            dia.show();
    }

实现步骤:1.首先在点击弹出dialog的button的xml属性上添加
android:onClick=”bteClick”属性
2.为onclick属性添加逻辑
设置反射器,创建反射器视图,创建对话框实例然后设置视图,为视图上的按钮添加响应(这里不用使用button获取实例,而是直接把视图当作按钮看待,设置dismiss方法使对话框消失)
3.最后将对话框显示出来

自定义对话框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="wrap_content"
    android:orientation="vertical"

    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#ffffff"
        android:gravity="center"
        android:orientation="horizontal"
        android:weightSum="1">
        <TextView
            android:text="音乐闹钟"
            android:textSize="18sp"
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.95" />

        </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:gravity="center"
        android:orientation="vertical"
        android:padding="10dp"
        >

    </LinearLayout>

    <TimePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/timePicker"
        android:layerType="software"
        android:layout_gravity="center_horizontal"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:gravity="right"
        android:orientation="horizontal"

        android:weightSum="1">

        <Button
            android:id="@+id/btx2"
            android:text="                                                取消"
            android:textColor="#558544"
            android:textSize="15sp"
            android:background="#ffffff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="0.99" />

        <Button
            android:id="@+id/btx"
            android:text="确定"
            android:textColor="#558544"
            android:textSize="15sp"
            android:background="#ffffff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp" />
    </LinearLayout>

</LinearLayout>

上面是模仿网易云音乐的音乐闹钟界面,我们可以添加获取时间的方法来做成闹钟的应用。

以上为基本对话框,另外还有时间,日期选择功能的对话框和进度对话框,下面是用线程来模拟登录的例子,其中用到了对话框

 package com.example.a22345.life;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * Created by 22345 on 2016/7/25.
 */
public class Activity13 extends Activity {
    ProgressDialog pd;
//进度框实例
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity13);

        //本篇为登录内容
        final EditText editText=(EditText)findViewById(R.id.passwordx);
       final AutoCompleteTextView autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.emailx);
        Button button=(Button)findViewById(R.id.sign_in);
        //以上3步为获取xml布局上的实例
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email=editText.getText().toString();
                //获取输入的帐号内容,并转换为字符串
                String  pswd=autoCompleteTextView.getText().toString();
                //获取输入的密码内容,并转换为字符串
                if(email.equals("1")&&pswd.equals("1"))
                {                        //判读是否可以通过
                    Dialog();
                    //上面是显示dialog
                    //两者同时运行,但是线程不一样
                    //下面是新建子线程
                    new Thread(){
                        public void run() {    //人为制造的for循环耗时操作效果(Sleep)
                            for (int i = 0; i < 4; i++) {
                                try {
                                    Thread.sleep(1000);    //强制停顿1s
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            handler.sendEmptyMessage(0);    //子线程给主线程发送消息
                        }
                    }.start();
                   //启动线程




                }
                else if(email.equals("")&&email.equals(""))
                {
                    Toast.makeText(Activity13.this,"宝宝没有发现你没有输入帐号或者密码!",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(Activity13.this,"帐号或者密码错误啦!",Toast.LENGTH_SHORT).show();
                }                   //否则就提出错误提醒
            }
        });
        //以上为设置button监听器


    }

    Handler handler=new Handler()         //存在于UI主线程里的handler
    {
        @Override
        public void handleMessage(Message msg){
            pd.dismiss();            //控制主线程里的pd消失
            Intent intent=new Intent(Activity13.this,Activity14.class);
            startActivity(intent);    //新的活动被打开
            finish();                 //旧的活动结束
        }

    };
    public void Dialog()
    {
        pd=new ProgressDialog(this);
        pd.setIcon(R.mipmap.ic_launcher);   //图标
        pd.setTitle("正在登录");           //题目
        pd.setMessage("请稍后……");      //内容
        pd.setCancelable(true);      //可取消
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);    //圆形
        pd.show();       //显示
    }
}                          //设置dialog方法,用来显示对话框

分析:1.UI主线程正在运行,输入帐号密码后,通过gettext获取输入内容,用equal方法判断,并提供未输入或者输入错误的提示
2.当输入正确后,启动dialog进度框,并同时启动子线程,此时两个线程分别走不同的线路,子线程所执行的操作就是sleep()延时效果,
通过for循环延时4s,最后由handler发出命令,回传给handler里的方法,执行方法达到进度框消失,新活动启动,旧活动销毁的效果

进度框会在4s后消失,并打开新的活动

                           2016.7.25  19:38 Surine
发布了26 篇原创文章 · 获赞 11 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章