zoukankan      html  css  js  c++  java
  • Android(java)学习笔记140:常用的对话框

    一、常见对话框属性:

    1. AlertDialog.Builder属性 

    setTitle: 为对话框设置标题 ;
     setIcon : 为对话框设置图标;
     setMessage: 为对话框设置内容;
    • setView :  给对话框设置自定义样式
     setItems: 设置对话框要显示的一个list,一般用于显示几个命令时;
     setMultiChoiceItems:用来设置对话框显示一系列的复选框;
     setNeutralButton : 响应中立行为的点击;
     setPositiveButton : 响应Yes/Ok的点击 ;
     setNegativeButton :响应No/Cancel的点击 ;
     create : 创建对话框 ;
    • show : 显示对话框;

    2. ProgressDialog属性

    • setProgressStyle:      设置进度条风格,风格为圆形,旋转的; 
    • setTitlt:                     设置ProgressDialog 标题;
    • setMessage:              设置ProgressDialog提示信息;
    • setIcon:                    设置ProgressDialog标题图标;
    • setIndeterminate:     设置ProgressDialog 的进度条是否不明确;
    • setCancelable:           设置ProgressDialog 是否可以按返回键取消;
    • setButton:                设置ProgressDialog 的一个Button(需要监听Button事件); 
    • show:                       显示ProgressDialog。

    二、常见对话框案例演示:

    1.确认取消对话框

    AlertDialog.Builder builder = new Builder(this);
            // 告诉工厂生产什么样的产品
            builder.setTitle("友情提醒");
            builder.setMessage("若练此功,必先自宫,是否继续?");
            builder.setPositiveButton("好的,想好了", new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "啊。。。", 0).show();
                    Toast.makeText(MainActivity.this, "及时自宫,也不一定成功", 0).show();
                }
            });
            builder.setNegativeButton("想想再说", new OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();
                }
            });
            builder.create().show();

    builder.create().show();

    这里的只有工厂(AlertDialog.Builder)先创建create()出来AlertDialog然后我们才能show()出来;

    这里我们看看create()方法的源码如下:

    public AlertDialog create() {
                final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false);
                P.apply(dialog.mAlert);
                dialog.setCancelable(P.mCancelable);
                if (P.mCancelable) {
                    dialog.setCanceledOnTouchOutside(true);
                }
                dialog.setOnCancelListener(P.mOnCancelListener);
                if (P.mOnKeyListener != null) {
                    dialog.setOnKeyListener(P.mOnKeyListener);
                }
                return dialog;
            }

    返回一个AlertDialog,然后我们再看看show()的源码如下:

    public AlertDialog show() {
                AlertDialog dialog = create();
                dialog.show();
                return dialog;
            }

    我们发现这里show()中其实也先实现了create(),,所以上面的:

    builder.create().show();其实可以改写成:builder.show();

    运行的效果如下:

    2.单选对话框

    // 工厂模式。
            AlertDialog.Builder builder = new Builder(this);
            // 告诉工厂生产什么样的产品
            builder.setTitle("请选择性别:");
            final String[] items = { "男", "女", "未知" };
            builder.setSingleChoiceItems(items, 2, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();// 关闭对话框
                    Toast.makeText(MainActivity.this, "您的性别:" + items[which], 0)
                            .show();
                }
            });
            builder.show();

    setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)方法来实现类似RadioButton的AlertDialog

    第一个参数是要显示的数据的数组

    第二个参数是初始值(初始被选中的item)

    第三个参数是点击某个item的触发事件

    这里OnClickListener里面方法public void onClick(DialogInterface dialog, int which):

    第一个参数:用来系统确定对话框(程序中出现多个对话框的时候,系统靠的就是这个参数DialogInterface dialog来确定我们点击的对话框);

    第二个参数:用来系统确定我们点击选择的对话框中的子项目

    运行的效果如下:

    3. 多选对话框

    // 工厂模式。
            AlertDialog.Builder builder = new Builder(this);
            // 告诉工厂生产什么样的产品
            builder.setTitle("请选择您喜欢的水果:");
            final String[] items = { "苹果", "香蕉", "葡萄", "橘子" };
            final boolean[] result = new boolean[] { true, true, false, false };
            builder.setMultiChoiceItems(items, result,
                    new OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which,
                                boolean isChecked) {
                            result[which] = isChecked;
                            Toast.makeText(MainActivity.this,
                                    items[which] + isChecked, 0).show();
                        }
                    });
            builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    StringBuffer sb = new StringBuffer();
                    for (int i = 0; i < result.length; i++) {
                        if (result[i]) {
                            sb.append(items[i] + ",");
                        }
                    }
                    Toast.makeText(MainActivity.this, "您喜欢:" + sb.toString(), 0)
                            .show();
                }
            });
            builder.show();

    public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)

    第一个参数:指定我们要显示的一组下拉多选框的数据集合

    第二个参数:代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择, 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};

    第三个参数:给每一个多选项绑定一个监听器

    这里的监听器OnMultiChoiceClickListener 中的方法: public void onClick(DialogInterface dialog, int which,boolean isChecked

    第一个参数:用来确定此处工厂模式创建的对话框;

    第二个参数:用来确定对话框中我们点击的子项;

    第三个参数:用来判别对话框的子项的点击状态(true:表示子项选择;false:表示子项没有被选择)

    运行效果:

    4.进度对话框

    (1)圆形进度条

    final ProgressDialog pd = new ProgressDialog(this);
            pd.setTitle("提醒");
            pd.setMessage("正在处理中。。。请稍后");
            pd.show();
            new Thread() {
                public void run() {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    pd.dismiss();
                };
            }.start();

    运行效果:

    (2)水平进度条

    final ProgressDialog pd = new ProgressDialog(this);
            // 设置进度的样式
            pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pd.setTitle("提醒");
            pd.setMessage("正在处理中。。。请稍后");
            pd.show();
            new Thread() {
                public void run() {
                    pd.setMax(100);
                    try {
                        for (int i = 0; i <= 100; i++) {
                            pd.setProgress(i);
                            Thread.sleep(500);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    pd.dismiss();
                };
            }.start();

    运行结果:

    5.上面代码都是我案例一部分代码,附上的案例程序如下:

    (1)activity_main.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity" >
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="click01"
            android:text="确定取消对话框" />
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="click02"
            android:text="单选对话框" />
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="click03"
            android:text="多选对话框" />
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="click04"
            android:text="进度对话框" />
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="click05"
            android:text="进度对话框" />
    
    </LinearLayout>

    布局效果:

    (2)接下来就是:MainAcitivity.java:

      1 package com.itheima.dialogset;
      2 
      3 import android.app.Activity;
      4 import android.app.AlertDialog;
      5 import android.app.AlertDialog.Builder;
      6 import android.app.ProgressDialog;
      7 import android.content.DialogInterface;
      8 import android.content.DialogInterface.OnClickListener;
      9 import android.content.DialogInterface.OnMultiChoiceClickListener;
     10 import android.os.Bundle;
     11 import android.view.View;
     12 import android.widget.Toast;
     13 
     14 public class MainActivity extends Activity {
     15 
     16     @Override
     17     protected void onCreate(Bundle savedInstanceState) {
     18         super.onCreate(savedInstanceState);
     19         setContentView(R.layout.activity_main);
     20     }
     21 
     22     /**
     23      * 确定取消对话框
     24      * 
     25      * @param view
     26      */
     27     public void click01(View view) {
     28         // 工厂模式。
     29         AlertDialog.Builder builder = new Builder(this);
     30         // 告诉工厂生产什么样的产品
     31         builder.setTitle("友情提醒");
     32         builder.setMessage("若练此功,必先自宫,是否继续?");
     33         builder.setPositiveButton("好的,想好了", new OnClickListener() {
     34             @Override
     35             public void onClick(DialogInterface dialog, int which) {
     36                 Toast.makeText(MainActivity.this, "啊。。。", 0).show();
     37                 Toast.makeText(MainActivity.this, "及时自宫,也不一定成功", 0).show();
     38             }
     39         });
     40         builder.setNegativeButton("想想再说", new OnClickListener() {
     41 
     42             @Override
     43             public void onClick(DialogInterface dialog, int which) {
     44                 Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();
     45             }
     46         });
     47         builder.show();
     48     }
     49 
     50     /**
     51      * 单选对话框
     52      * 
     53      * @param view
     54      */
     55     public void click02(View view) {
     56         // 工厂模式。
     57         AlertDialog.Builder builder = new Builder(this);
     58         // 告诉工厂生产什么样的产品
     59         builder.setTitle("请选择性别:");
     60         final String[] items = { "男", "女", "未知" };
     61         builder.setSingleChoiceItems(items, 2, new OnClickListener() {
     62             @Override
     63             public void onClick(DialogInterface dialog, int which) {
     64                 dialog.dismiss();// 关闭对话框
     65                 Toast.makeText(MainActivity.this, "您的性别:" + items[which], 0)
     66                         .show();
     67             }
     68         });
     69         builder.show();
     70     }
     71 
     72     /**
     73      * 多选对话框
     74      * 
     75      * @param view
     76      */
     77     public void click03(View view) {
     78         // 工厂模式。
     79         AlertDialog.Builder builder = new Builder(this);
     80         // 告诉工厂生产什么样的产品
     81         builder.setTitle("请选择您喜欢的水果:");
     82         final String[] items = { "苹果", "香蕉", "葡萄", "橘子" };
     83         final boolean[] result = new boolean[] { true, true, false, false };
     84         builder.setMultiChoiceItems(items, result,
     85                 new OnMultiChoiceClickListener() {
     86                     @Override
     87                     public void onClick(DialogInterface dialog, int which,
     88                             boolean isChecked) {
     89                         result[which] = isChecked;
     90                         Toast.makeText(MainActivity.this,
     91                                 items[which] + isChecked, 0).show();
     92                     }
     93                 });
     94         builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
     95             @Override
     96             public void onClick(DialogInterface dialog, int which) {
     97                 StringBuffer sb = new StringBuffer();
     98                 for (int i = 0; i < result.length; i++) {
     99                     if (result[i]) {
    100                         sb.append(items[i] + ",");
    101                     }
    102                 }
    103                 Toast.makeText(MainActivity.this, "您喜欢:" + sb.toString(), 0)
    104                         .show();
    105             }
    106         });
    107         builder.show();
    108     }
    109 
    110     /**
    111      * 进度对话框
    112      * 
    113      * @param view
    114      */
    115     public void click04(View view) {
    116         final ProgressDialog pd = new ProgressDialog(this);
    117         pd.setTitle("提醒");
    118         pd.setMessage("正在处理中。。。请稍后");
    119         pd.show();
    120         new Thread() {
    121             public void run() {
    122                 try {
    123                     Thread.sleep(5000);
    124                 } catch (InterruptedException e) {
    125                     e.printStackTrace();
    126                 }
    127                 pd.dismiss();
    128             };
    129         }.start();
    130     }
    131 
    132     /**
    133      * 进度条对话框
    134      * 
    135      * @param view
    136      */
    137     public void click05(View view) {
    138         final ProgressDialog pd = new ProgressDialog(this);
    139         // 设置进度的样式
    140         pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    141         pd.setTitle("提醒");
    142         pd.setMessage("正在处理中。。。请稍后");
    143         pd.show();
    144         new Thread() {
    145             public void run() {
    146                 pd.setMax(100);
    147                 try {
    148                     for (int i = 0; i <= 100; i++) {
    149                         pd.setProgress(i);
    150                         Thread.sleep(500);
    151                     }
    152                 } catch (InterruptedException e) {
    153                     e.printStackTrace();
    154                 }
    155                 pd.dismiss();
    156             };
    157         }.start();
    158     }
    159 
    160 }

     

  • 相关阅读:
    个人技术博客(α)
    git常用命令合集
    软件工程实践2017第二次结对作业
    软件工程实践2017第一次结对作业
    软件工程实践2017第二次作业
    软件工程实践2017第一次作业
    学习总结
    约瑟夫
    今天是星期几
    斐波那契数列取石子游戏
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4764521.html
Copyright © 2011-2022 走看看