zoukankan      html  css  js  c++  java
  • 一起学Android之Dialog

    概述

    对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口。Dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要讲解的是AlertDialog。

    什么是AlertDialog?

    可以显示标题、最多三个按钮、可供选择的项目列表或自定义布局的对话框。

    创建步骤

    1. 构建一个Builder(AlertDialog.Builder)。
    2. 设置对话框标题(setTitle),内容信息(setMessage)。
    3. 设置对话框显示的按钮,最多三个按钮(setPositiveButton,setNegativeButton)。
    4. 调用方法,创建对话框对象(create)。
    5. 显示对话框(show)。

    涉及知识点

    • AlertDialog.Builder 对话框构造器,可以进行对话框进行设置,并创建对话框对象。
    • setTitle 设置对话框标题,setMessage设置对话框显示的文本内容
    • setNegativeButton 设置对话框显示的否定按钮(Cancel), setPositiveButton设置对话框显示的肯定按钮(OK)
    • show() 显示对话框
    • setItems 设置对话框的列表内容
    • setSingleChoiceItems 设置单选按钮的列表项,setMultiChoiceItems设置多选按钮的列表项
    • setView 设置自定义视图的对话框

    默认对话框

    如下图所示(显示了标题,内容,两个按钮):

    关键代码如下:

     1     /**
     2      * 默认对话框事件响应方法
     3      *
     4      * @param v
     5      */
     6     public void showDefaultDialog(View v) {
     7         //创建一个Builder
     8         AlertDialog.Builder builder = new AlertDialog.Builder(this);
     9         //设置对话框标题
    10         builder.setTitle("提示");
    11         //设置对话框内容
    12         builder.setMessage("这是一个对话框的提示");
    13         //积极按钮?
    14         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    15             @Override
    16             public void onClick(DialogInterface dialog, int which) {
    17                 Toast.makeText(MainActivity.this, "你选择了OK", Toast.LENGTH_SHORT).show();
    18             }
    19         });
    20         //消极按钮
    21         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    22             @Override
    23             public void onClick(DialogInterface dialog, int which) {
    24                 Toast.makeText(MainActivity.this, "你选择了Cancel", Toast.LENGTH_SHORT).show();
    25             }
    26         });
    27         //创建一个对话框
    28         AlertDialog dialog = builder.create();
    29         //显示一个对话框
    30         dialog.show();
    31     }

    列表对话框

    如下图所示(弹出的对话框内容展示为一个列表)用户通过列表进行选择

    关键代码如下:

     1  /**
     2      * 列表对话框响应事件
     3      *
     4      * @param v
     5      */
     6     public void showListDialog(View v) {
     7         //构件一个对话框Builder
     8         AlertDialog.Builder builder = new AlertDialog.Builder(this);
     9         //设置标题
    10         builder.setTitle(R.string.pick_color);
    11         //将资源文件转化为数组对象
    12         arr_colors = getResources().getStringArray(R.array.arr_colors);
    13         //设置列表内容和点击事件
    14         builder.setItems(R.array.arr_colors, new DialogInterface.OnClickListener() {
    15             @Override
    16             public void onClick(DialogInterface dialog, int which) {
    17                 Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
    18             }
    19         });
    20         //创建一个对话框
    21         AlertDialog dialog = builder.create();
    22         //显示一个对话框
    23         dialog.show();
    24     }

    单选按钮对话框

    如下图所示(用户通过单选按钮进行选择):

    关键代码如下:

     1    /**
     2      * 单选框对话框按钮事件
     3      *
     4      * @param v
     5      */
     6     public void showSingleDialog(View v) {
     7         //构件一个对话框Builder
     8         AlertDialog.Builder builder = new AlertDialog.Builder(this);
     9         //设置标题
    10         builder.setTitle(R.string.pick_color);
    11         //将资源文件转化为数组对象
    12         arr_colors = getResources().getStringArray(R.array.arr_colors);
    13         checkedItems=new int[arr_colors.length];
    14         //设置列表内容和点击事件,第二个参数checkedItem表示默认选中项
    15         builder.setSingleChoiceItems(R.array.arr_colors, 0, new DialogInterface.OnClickListener() {
    16             @Override
    17             public void onClick(DialogInterface dialog, int which) {
    18                 for(int i=0;i<checkedItems.length;i++){
    19                     if(i==which){
    20                         checkedItems[i]=1;
    21                     }else{
    22                         checkedItems[i]=0;
    23                     }
    24                 }
    25                 Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
    26             }
    27         });
    28         //积极按钮?
    29         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    30             @Override
    31             public void onClick(DialogInterface dialog, int which) {
    32                 Toast.makeText(MainActivity.this, "你选择了OK"+getCheckedItems(), Toast.LENGTH_SHORT).show();
    33             }
    34         });
    35         //消极按钮
    36         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    37             @Override
    38             public void onClick(DialogInterface dialog, int which) {
    39                 Toast.makeText(MainActivity.this, "你选择了Cancel"+getCheckedItems(), Toast.LENGTH_SHORT).show();
    40             }
    41         });
    42         //创建一个对话框
    43         AlertDialog dialog = builder.create();
    44         //显示一个对话框
    45         dialog.show();
    46     }

    复选框对话框

    如下图所示(对话框的内容可以进行多选):

    关键代码如下:

     1   /**
     2      * 复选框对话框事件
     3      *
     4      * @param v
     5      */
     6     public void showMultipleDialog(View v) {
     7         //构件一个对话框Builder
     8         AlertDialog.Builder builder = new AlertDialog.Builder(this);
     9         //设置标题
    10         builder.setTitle(R.string.pick_color);
    11         //将资源文件转化为数组对象
    12         arr_colors = getResources().getStringArray(R.array.arr_colors);
    13         checkedItems=new int[arr_colors.length];
    14         //设置列表内容和点击事件
    15         builder.setMultiChoiceItems(R.array.arr_colors, null, new DialogInterface.OnMultiChoiceClickListener() {
    16             @Override
    17             public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    18                 String msg="";
    19                 if(isChecked){
    20                     checkedItems[which]=1;
    21                     msg="选择";
    22                 }else{
    23                     checkedItems[which]=0;
    24                     msg="取消";
    25                 }
    26                 Toast.makeText(MainActivity.this, "你"+msg+"了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
    27             }
    28         });
    29         //积极按钮?
    30         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    31             @Override
    32             public void onClick(DialogInterface dialog, int which) {
    33                 Toast.makeText(MainActivity.this, "你选择了OK:"+getCheckedItems(), Toast.LENGTH_SHORT).show();
    34             }
    35         });
    36         //消极按钮
    37         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    38             @Override
    39             public void onClick(DialogInterface dialog, int which) {
    40                 Toast.makeText(MainActivity.this, "你选择了Cancel:"+getCheckedItems(), Toast.LENGTH_SHORT).show();
    41             }
    42         });
    43         //创建一个对话框
    44         AlertDialog dialog = builder.create();
    45         //显示一个对话框
    46         dialog.show();
    47     }

    自定义对话框


    如下图所示(用户可以在弹出的对话框中输入内容等信息)

    关键代码如下:

     1  /**
     2      * 自定义对话框事件按钮
     3      * @param v
     4      */
     5     public void showCustomerDialog(View v) {
     6 
     7         AlertDialog.Builder builder = new AlertDialog.Builder(this);
     8         // Get the layout inflater
     9         LayoutInflater inflater = getLayoutInflater();
    10         View customerView=inflater.inflate(R.layout.dialog_layout, null);
    11         // Inflate and set the layout for the dialog
    12         // Pass null as the parent view because its going in the dialog layout
    13         mUserName= (EditText) customerView.findViewById(R.id.username);
    14         mPassword= (EditText) customerView.findViewById(R.id.password);
    15         builder.setView(customerView)
    16                 // Add action buttons
    17                 .setPositiveButton(R.string.sign_in, new DialogInterface.OnClickListener() {
    18                     @Override
    19                     public void onClick(DialogInterface dialog, int id) {
    20                         // sign in the user ...
    21                         Toast.makeText(MainActivity.this, "你输入的用户名为:"+mUserName.getText()+"密码为:"+mPassword.getText(), Toast.LENGTH_SHORT).show();
    22                     }
    23                 })
    24                 .setNegativeButton(R.string.cancel2, new DialogInterface.OnClickListener() {
    25                     public void onClick(DialogInterface dialog, int id) {
    26                         Toast.makeText(MainActivity.this, "你取消了输入的用户名密码", Toast.LENGTH_SHORT).show();
    27 
    28                     }
    29                 });
    30         //创建一个对话框
    31         AlertDialog dialog = builder.create();
    32         //显示一个对话框
    33         dialog.show();
    34     }

    备注


    记录学习,记录进步!

  • 相关阅读:
    建立一个能持续处理的C/S网络程序
    建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
    归并排序
    堆排序
    计数排序
    不要在PHP7中踩这些坑
    关于生活学习
    topthink/think-swoole 扩展包的使用 之 WebSocket
    PHP 三元运算符
    topthink/think-swoole 扩展包的使用 之 Task
  • 原文地址:https://www.cnblogs.com/hsiang/p/10586223.html
Copyright © 2011-2022 走看看