360我要接单 核心算法分析

来源:互联网 发布:python中文文本相似度 编辑:程序博客网 时间:2024/09/21 08:58

那年夏天
Inner peace
android学习—Dialog

Dialog

  Dialog,对话框,一个对话框就是一个小窗口,并不会填满整个屏幕,通常是以模态显示,要求用户必须采取行动才能继续进行剩下的操作。

  Android提供了丰富的对话框支持,它提供了如下4中常用的对话框:

AlertDialog:警告对话框,使用最广泛功能最丰富的一个对话框。
ProgressDialog:进度条对话框,只是对进度条进行了简单的封装。
DatePickerDialog:日期对话框。
TimePickerDialog:时间对话框。
  所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。

AlertDialog

  AlertDialog继承自Dialog类,对于Android内置的AlterDialog,它可以包含一个标题、一个内容消息或者一个选择列表、最多三个按钮。而创建AlterDialog推荐使用它的一个内部类AlterDialog.Builder创建。使用Builder对象,可以设置AlterDialog的各种属性,最后通过Builder.create()就可以得到AlterDialog对象,如果只是还需要显示这个AlterDialog,一般可以直接使用Builder.show()方法,它会返回一个AlterDialog对象,并且显示它。

  如果仅仅是需要提示一段信息给用户,那么就可以直接使用AlterDialog的一些属性设置提示信息,涉及到的方法有:

AlterDialog create():根据设置的属性,创建一个AlterDialog。
AlterDialog show():根据设置的属性,创建一个AlterDialog,并且显示在屏幕上。
AlterDialog.Builder setTitle():设置标题。
AlterDialog.Builder setIcon():设置标题的图标。
AlterDialog.Builder setMessage():设置标题的内容。
AlterDialog.Builder setCancelable():设置是否模态,一般设置为false,表示模态,要求用户必须采取行动才能继续进行剩下的操作。
  Tips:AlterDialog.Builder的很多设置属性的方法,返回的均是这个AlterDialog.Builder对象,所以可以使用链式方式编写代码,这样更方便。

  当一个对话框调用了show()方法后,展示到屏幕上,如果需要消除它,可以使用DialogInterface接口声明的两个方法,cancel()和dismiss()使对话框取或者消除,这两个方法的作用是一样的,不过推荐使用dismiss()。Dialog和AlterDialog都实现了DialogInterface接口,所以只要是对话框,均可以使用这两个方法来消除对话框。

AlterDialog的按钮

  AlterDialog内置了三个按钮,可以直接使用setXxxButton()方法进行设置,对于一般的对话框,使用三个按钮基本上也够用了,下面是这三个方法的签名:

AlterDialog.Builder setPositiveButton(CharSquence text , DialogInterFace.OnClickListener):一个积极的按钮,一般用于“OK”或者“继续”等操作。
AlterDialog.Builder setNegativeButton(CharSquence text , DialogInterFace.OnClickListener):一个负面的按钮,一般用于“取消”操作。
AlterDialog.Builder setNeutralButton(CharSquence text , DialogInterFace.OnClickListener):一个比较中性的按钮,一般用于“忽略”、“以后提醒我”等操作。
  上面介绍的DialogInterface接口,还提供了一系列的事件响应,这三个按钮均需要传递一个DialogInterFace.OnClickListener接口对象,实现其点击事件的触发,在这个接口中需要实现一个onClick(DialogInterface dialog,int which),dialog为当前触发事件的对话框对象接口,可以直接强制转换为AlterDialog进行操作;which为点击按钮的标识符,是一个整形的数据,对于这三个按钮而言,每个按钮使用不同的int类型数据进行标识:Positive(-1)、Negative(-2)、Neutral(-3)。

  而除了专门为按钮点击实现的DialogInterFace.OnClickListener事件外,DialogInterface还提供了一些其他的事件,供Dialog对象响应,这些事件只是对Dialog声明周期各个状态的响应,一看就明白了,就不再详细讲解了,下面是这几个事件的说明:

interface DialogInterface.OnCancelListener:当对话框调用cancel()方法的时候触发。
interface DialogInterface.OnDismissListener:当对话框调用dismiss()方法的时候触发。
interface DialogInterface.OnShowListener:当对话框调用show()方法的时候触发。
interface DialogInterface.OnMultiChoiceListener:当对话框使用多选列表,并且选中的时候触发。
  示例:

复制代码
button.setOnClickListener(new View.OnClickListener() {

        @Override        public void onClick(View arg0) {            // TODO Auto-generated method stub            AlertDialog.Builder builder = new AlertDialog.Builder(                    MainActivity.this);            builder.setTitle("提示");            builder.setMessage("你确定要删除吗?");            builder.setPositiveButton("确定", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    Toast.makeText(MainActivity.this, "确定被点击",                            Toast.LENGTH_SHORT).show();                }            });            builder.setNegativeButton("取消", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    Toast.makeText(MainActivity.this, "取消被点击",                            Toast.LENGTH_SHORT).show();                }            });            builder.setNeutralButton("忽略", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    Toast.makeText(MainActivity.this, "忽略被点击",                            Toast.LENGTH_SHORT).show();                }            });            builder.setIcon(R.drawable.ic_launcher);            AlertDialog alertDialog = builder.create();            alertDialog.show();        }    });

复制代码
效果:

AlterDialog的列表形式

  AlterDialog除了展示一些提示信息,还可以展示一种列表的形式,需要使用到Builder.setItems(CharSequence[] items,DialogInterface.OnClickListener listener)方法进行设置,它需要传递一个CharSequenece类型的数组,以绑定列表的数据,它同样需要传递一个DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点击触发项的items中的下标。

  示例:

复制代码
button2.setOnClickListener(new View.OnClickListener() {

        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            AlertDialog.Builder builder = new AlertDialog.Builder(                    MainActivity.this);            builder.setTitle("请选择以下城市");            // builder.setMessage("请选择以下城市");//不能设置message的内容            builder.setItems(items, new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    // TODO Auto-generated method stub                    String select_item = items[which].toString();                    Toast.makeText(MainActivity.this,                            "选择了-->>" + select_item, Toast.LENGTH_SHORT)                            .show();                }            });            AlertDialog dialog = builder.create();            dialog.show();        }    });

复制代码
效果:

AlterDialog的单选列表

  AlterDialog还可以使用一种单选的列表样式,使用Builder.setSingleChoiceItems(CharSequenece[] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具有多项重载,主要是为了应对不同的数据源,items为列表项数组,checkedItem为初始选项,listener为点击响应事件。有时候并不一定需要选中之后就关闭对话框,可以设置两个按钮,用于确定选择。

  示例:

复制代码
button3.setOnClickListener(new View.OnClickListener() {

        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            AlertDialog.Builder builder = new AlertDialog.Builder(                    MainActivity.this);            builder.setTitle("请选择以下城市");            builder.setSingleChoiceItems(items, -1, new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    // TODO Auto-generated method stub                    String select_item = items[which].toString();                    Toast.makeText(MainActivity.this,                            "选择了-->>" + select_item, Toast.LENGTH_SHORT)                            .show();                }            });            builder.setPositiveButton("确定", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    // TODO Auto-generated method stub                    dialog.dismiss();                }            });            AlertDialog dialog = builder.create();            dialog.show();        }    });

复制代码
效果:

AlterDialog多选列表

  AlterDialog除了单选列表,还有多选的列表。可以使用Builder.setMultiChoiceItems(CharSequence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也同样具有多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,因为是多选列表,所以如果设置需要全部设置,如果没有默认选中,则传Null;listener为多选项点击触发事件。

  示例:

复制代码
button4.setOnClickListener(new View.OnClickListener() {

        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            AlertDialog.Builder builder = new AlertDialog.Builder(                    MainActivity.this);            builder.setTitle("请选择以下城市");            builder.setMultiChoiceItems(items, new boolean[] { false,                    false, false }, new OnMultiChoiceClickListener() {                @Override                public void onClick(DialogInterface dialog, int which,                        boolean isChecked) {                    // TODO Auto-generated method stub                    String select_item = items[which].toString();                    Toast.makeText(MainActivity.this,                            "选择了-->>" + select_item, Toast.LENGTH_SHORT)                            .show();                }            });            builder.setPositiveButton("确定", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    // TODO Auto-generated method stub                    dialog.dismiss();                }            });            AlertDialog dialog = builder.create();            dialog.show();        }    });

复制代码
效果:

ProgressDialog

  有些时候,只是需要提示用户等待,比如在执行耗时操作等的时候,可以使用进度对话框来显示一个进度信息,提示用户等待,这个时候可以使用ProgressDialog。ProgressDialog的使用方式大部分可以参见ProgressBar,其实就是一个封装了ProgressBar的对话框。

  ProgressDialog有两种显示方式,一种是以一个滚动的环状图标,可以显示一个标题和一段文本内容的等待对话框;另外一种是带刻度的进度条,和常规的进度条用法一致。两种样式通过ProgressDialog.setProgressStyle(int style)设置,可以通过ProgressDialog的两个常量进行设置:STYLE_HORIZONTAL:刻度滚动;STYLE_SPINNER:图标滚动,默认选项。

  对于图标滚动,可以使用两种方式实现,一种是常规的调用构造函数,再设置对应的属性;另外一种是直接使用ProgressDialog的静态方法show(),直接返回一个ProgressDialog对象,并且调用show()方法。

  示例一:

复制代码
button5.setOnClickListener(new View.OnClickListener() {

        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            // 第一种方法,使用ProgressDialog构造函数            ProgressDialog dialog = new ProgressDialog(MainActivity.this);            dialog.setTitle("等待");            dialog.setMessage("正在加载");            dialog.show();            // 第二种方法,使用静态的show方法            // ProgressDialog.show(MainActivity.this, "等待", "正在加载....",            // false,false);        }    });

复制代码
效果:

  示例二:

复制代码
button6.setOnClickListener(new View.OnClickListener() {

        @Override        public void onClick(View v) {            // TODO Auto-generated method stub            // 第一种方式            // ProgressDialog dialog = new ProgressDialog(MainActivity.this,            // ProgressDialog.STYLE_HORIZONTAL);            ProgressDialog dialog = new ProgressDialog(MainActivity.this);            dialog.setTitle("下载提示");            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);            dialog.setMax(100);            dialog.setProgress(20);            dialog.show();        }    });

复制代码
效果:

AlertDialog自定义样式

  有些时候,Android自带的一些样式设置已经无法满足需求了,那么可以使用自定义样式,自定义个XML布局文件,用这个文件的内容作为AlertDialog的样式展示在屏幕上,这样就可以灵活定制对话框了。对于定制的XML文件,可以使用LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,然后使用Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()即可。

新建布局文件(引用子官方文档):

复制代码

import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public class rong {    public static void main(String[] args) {        try {            String sdk;            sdk = "@rong360#app-sdk";            sdk = "rong360@rong360.com";            String token =  a(a(), sdk);            System.out.println(token);        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }    }    private static Map a()    {        HashMap localHashMap = new HashMap();        localHashMap.put("time", "1446182727735"); // Long.toString(System.currentTimeMillis())        localHashMap.put("app_ver", "5");        localHashMap.put("app_platform", "android");        localHashMap.put("apply_id", "591098"); // %E6%B7%B1%E5%9C%B3        localHashMap.put("banker_id", "146044");        System.out.println(localHashMap.get("time").toString());        return localHashMap;    }    public static String a(Map paramMap, String paramString)             throws NoSuchAlgorithmException, UnsupportedEncodingException{        StringBuilder localStringBuilder = new StringBuilder();        StringBuilder paramMap1 = new StringBuilder();        try {            Object localObject = new TreeMap(paramMap).entrySet();            localObject = ((Set)localObject).iterator();            while (((Iterator)localObject).hasNext()){                Map.Entry localEntry = (Map.Entry)((Iterator)localObject).next();                paramMap1.append((String)localEntry.getKey()).append("=").append((String)localEntry.getValue());            }            paramMap1.append(paramString);        } catch (Exception e){            e.printStackTrace();            return null;        }        String strTempMap = paramMap1.toString();        byte[] Bytemp = strTempMap.getBytes("UTF-8");        byte[] paramMap2 = MessageDigest.getInstance("MD5").digest(Bytemp);        int i = 0;        int len = paramMap2.length;        System.out.println(len);        while (i < len){            paramString = Integer.toHexString(paramMap2[i] & 0xFF);            if (paramString.length() == 1) {                localStringBuilder.append("0");            }            System.out.println(paramMap2[i]+"="+paramString);            localStringBuilder.append(paramString);            i += 1;        }        return localStringBuilder.toString();    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为开机需要激活码怎么办 高铁提前上车了出站怎么办 买火车票忘记带身份证怎么办 买高铁票没赶上怎么办 电脑放视频没有声音怎么办 内业计算中角度超限怎么办 遇到飞机出故障乘客怎么办 模拟城市5矿产满了怎么办 模拟城市5劳工短缺怎么办 模拟城市5土地价值低怎么办 考上研究生想二战研究生学籍怎么办 小米3屏幕花屏怎么办 狗被城管抓了怎么办 隔壁家的狗扰民怎么办 遛狗碰到碰瓷老太太怎么办 碰到保安碰瓷的人怎么办 碰到碰瓷的车怎么办 商品房楼上邻居违规装修怎么办 遇到不讲道理的邻居怎么办 邻居告我我该怎么办 丈夫判刑十年回来妻子怎么办 有人发色情信息给妻子怎么办 小孩拉蛋花样便怎么办 鸡下的蛋壳是软怎么办 幼升小错过了现场审核怎么办 老人户口迁移到北京医保怎么办 过山洞经常堵耳朵怎么办 门有了一个洞该怎么办 公司要求补税没钱补怎么办 公司补税补不起了怎么办 脚被石头砸肿了怎么办 砸到脚背肿了怎么办 小猫吃完饭抓地怎么办 耳机链接处断了怎么办 表链从表盘断了怎么办 龟头和皮分开了怎么办 微信买票被骗了怎么办 撞车了我的全责怎么办 蒙田包包里面不耐脏怎么办? 摩托车转向灯不会打怎么办 浓硫酸弄到脸上怎么办