前面的总结是写过对话框的,但是那只是冰山一角,简单的创建和使用罢了。

  今天具体讲下AlertDialog。

  首先对话框不需要在布局里写,在活动里new出来的。

  1. AlertDialog.Builder dialog = new AlertDialog.Builder(this);//创建对话框
    dialog.setTitle("退出");//标题
    dialog.setMessage("是否保存文档?");//提示消息
  2.  
  3. dialog.show();//这个不能少,没有就显示不出来
  4.  
  5. 上面的就是基本的架构了,但是没有按钮(一般而言,对话框都要有按钮选择的吧)
  1. dialog.setNeutralButton("取消", null);//这就是两个比较敷衍的按钮选择
    dialog.setPositiveButton("确定", null);//null这边还可以new一个监听器,就不展示了

这里的对话框的三个位置是固定的,如果想自己改,就得自己写对话框。

  1. final DatePicker datePicker = new DatePicker(this);//主要是为了给对话框搞控件,
  1. dialog.setView(datePicker);//
  2.  
  3. 上面两句话就是,当时我有种想法是,这边new出来的,是不是布局那边会自动产生,这个想法是错的
    这边new出来的日期控件,相当于一个临时开辟的控件,是给对话框单独使用的。

就把这个控件插入了,还挺好用的吧,就直接new出来,其他控件都可以的文本,按钮等等。

  1. final String[] items = {"1", "2", "3", "4", "5",};//
    new AlertDialog.Builder(this)//
    .setTitle("标题")
    // .setMessage("消息")
    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
  2.  
  3. }
    })
    .setItems(items, new DialogInterface.OnClickListener() {//
    @Override
    public void onClick(DialogInterface dialog, int which) {
    String item = items[which];
    Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
    }//
    })
    .show();

这段代码就是,学java的时候有个学长提过的“链式编程”,就可以少很多代码了,而且还不要太多变量。效果一样哈。

这段代码提到的核心是setItems,这个就是简单的列表对话框。

过程就是先创建一个字符串数组当每个列表的,setItems的参数就是一个字符串数组和一个对话框的监听器,which这个有点像下标的意思,就是能够确定当前是字符串数组的第几列,这样就可以按顺序创建每条列表标题了。

这应该算固定格式了,字符串数组,创建列表对话框,然后new监听器再按which依次搞定列表,为啥不用循环,是不是奇怪,因为这是个监听器,一般点完列表中的数据就会跳出对话框,并且用监听器记录数据,下次进来再选就行了,有的人说我想多选,那这个时候就要引入多选框,后面介绍吧(纯属个人理解,本牛崽不抗揍,别打脸)。

(“鼻青脸肿”,这,上面说得不好,然后被打了,没事咱还是要坚强,要生活,继续,讲多选框吧)

下面这段代码可以看出来和简单的列表对话框大同小异,都是借助字符串数组生成的。

  1. final String[] strings = new String[]{"数学", "英语", "语文"};//
    final boolean[] checked = new boolean[]{true, false, true};//这个的作用很明了吧,checked,学过HTML表单,
    //学过前面单复选框的都知道,这是默认选项,这个数组为了就是默认选哪几项
    new AlertDialog.Builder(this)
    .setTitle("今天有什么作业")//
    .setMultiChoiceItems(strings, checked, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    Toast.makeText(MainActivity.this,
    strings[which] + isChecked,
    Toast.LENGTH_SHORT
    ).show();//提示选择的和默认的,isChecked的值是根据监听器得到的情况(选择或没选择)
    }
    })
    .setPositiveButton("提交", new DialogInterface.OnClickListener() {//一个确定按钮,提交数据,也就是在running打印数据而已
    @Override
    public void onClick(DialogInterface dialog, int which) {
    String msg = "今天的作业有:";
    for (int i = 0; i < checked.length; i++) {//判断
    if (checked[i]) {
    msg += strings[i] + ",";
    }
    }
    System.out.println(msg);//
    }
    })
    .show();//
    这个,经过本牛崽不断反思,好像没啥问题,哈哈。
    就是选择,然后running输出你选择的数据。不贴模拟器了。
  2.  
  3. 继续,有了多选的复选框,那肯定少不了形影不离的单选框啊!setSingleChoiceItems
  1. 单选框的这个也是大同小异,注意的是用单选框时的参数,第一个是字符串数组,第二个就是默认选哪个(下标),
    如果超出一般就是不选,注意的是如果超出,字符串数组那边是否超出,得注意。
  1. private int selectItem = -1;//没有返回数据的方法,就只能用一个全局变量来记录当前所选的下标了,
  2.  
  3. private void open3() {
    final String[] strings = new String[]{"数学", "英语", "语文"};//
    new AlertDialog.Builder(this)
    .setTitle("今天有什么作业")
    .setSingleChoiceItems(strings, selectItem, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    Toast.makeText(MainActivity.this, strings[which], Toast.LENGTH_SHORT).show();
    selectItem = which;//用全局变量存下当前所选的下标,which是监听得来的下标
    }
    })
    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {//
    if (selectItem < 0) {
    Toast.makeText(MainActivity.this, "请选择", Toast.LENGTH_SHORT).show();
    } else {
    Toast.makeText(MainActivity.this,
    strings[selectItem],
    Toast.LENGTH_SHORT
    ).show();//
    }
    }
    })
    .show();//
    最后直接提示窗口就好了。
  4.  
  5. 感觉有点多耶,自己理解都花了不少时间,好,AlertDialog这边就告一段落了,大家多试试吧,建议使用它。
  6.  
  7. 下面介绍的是自定义的对话框:
    就是他只会提供一个空的对话框界面,对话框界面的性质就是在原有的活动界面上铺一层布一样,
    AlertDialog就是铺上了有图案的布,自定义的就是空布,所以它的可塑性强,但是难度没的说,从无到有的搞。

自己动手嘛,布局也得自己来,这就相当于在布上刻图案了。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:orientation="vertical">
  4.  
  5. <TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="15dp"
    android:textSize="24sp"
    tools:text="标题" />
  6.  
  7. <TextView
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="消息消息消息消息消息消息消息消息消息消息" />
  8.  
  9. <View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_weight="1" />
  10.  
  11. <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="34dp"
    android:layout_marginLeft="97dp"
    android:background="#ffd"
  12.  
  13. android:baselineAligned="false"
    tools:text="确定" />
  14.  
  15. </LinearLayout>
  16.  
  17. 这得提一下,就是tools:它的东西都是给我们布局设计看的,模拟器上运行是不能看到效果的,所以在活动中得自己搞setText
  18.  
  19. 然后就是自己写的自定义对话框了,但是因为是一块盖上去的布,所以我们得继承下Dialog这块布,图案和材料都自己搞。
  1. 下面的就是继承了Dialog
    然后因为是空布,我们得把图案印上去,就把布局文件拿过来,setCancelable它的作用就是控制退出显示的方式(如果是false就是不能用back以及点周围的布退出,就只能确定或者解雇才行)
  1. 这边还是理解了很久才懂的,注释写到各个方法上吧!
  2.  
  3. public class MyDialog extends Dialog {
    public MyDialog(@NonNull Context context) {
    super(context);
    setContentView(R.layout.activity_my_dialog);
    setCancelable(false);
    }
  4.  
  5. public MyDialog setTitle1(String title) {//这边就是模仿setTitle,毕竟也是个文本,就直接调用然后setText
    TextView textView = findViewById(R.id.title);
    textView.setText(title);
    return this;
    }
    //我们每个方法的返回值都返回自定义对话框的对象,是因为这样才能“链式编程”
  1. public MyDialog setMessage1(String message) {//一样的,就是简单的改变文本内容
    TextView textView = findViewById(R.id.message);
    textView.setText(message);
    return this;
    }
  2. public MyDialog setButton(String buttonMsg, final OnClickListener1 listener) {
    Button button = findViewById(R.id.button);
    button.setText(buttonMsg);
    button.setOnClickListener(new View.OnClickListener() {//这边也是没用对话框自带的监听器,而是自己写的监听器接口
    @Override
    public void onClick(View v) {//自己写的视图监听器
    if (listener != null) {//这就是实现了因为那些按钮可以不写监听器,(“确定”,null)这种情况,才加了判断语句
    listener.onClick(MyDialog.this, (Button) v);
    }
    }
    });
    return this;
    }
  3. public interface OnClickListener1 {//自己写的监听器接口,本以为这句话是实现监听的重要部分,
    //其实仔细一想,实现监听的主要部分还是在控件上的,接口定义的方法是让其他 调用它的 去实现的。
  4. void onClick(MyDialog dialog, Button button);
    }
    }
  5. 创建好自定义对话框就是使用了:
  1. final MyDialog myDialog = new MyDialog(this);//
    myDialog.setTitle1("自定义对话框标题")
    .setMessage1("自定义对话的消息,自定义对话的消息," +
    "自定义对话的消息,自定义对话的消息," +
    "自定义对话的消息,自定义对话的消息," +
    "自定义对话的消息,")
    //
    .setButton("确定", new MyDialog.OnClickListener1() {//
    @Override
    public void onClick(MyDialog dialog, Button button) {
    dialog.dismiss();//这就是销毁,解雇,直接退出对话框。
    String s = button.getText().toString();//这边直接获得按钮的内容。然后提示。
    Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
    }
    }).show();//
    这边为了好记,基本上是还原了大部分的AlertDialog的一些东西。

应该看得过去吧,不辣眼睛就行。今天的内容就这些了,对话框的知识大概就告一段落了,有时间可以自己去试着搞点东西出来。

周末愉快,还有19个小时的时间(包括睡觉)。

该玩的时候还是得释放压力滴,以自己最好的状态面对学习,这样每天才会元气满满,加油。

  1.  
  1.  

Android——对话框的全部内容。(课堂总结)的更多相关文章

  1. Android对话框

    这周过的实在是艰辛,自打这周二起我的本本就开始闹"罢工",最后还是重装系统了事. . .   只是可怜了我的那些被格了的软件(悲伤辣么大)!  往事不要再提,人生几度风雨... 简 ...

  2. Android 对话框的应用1

    1.介绍 2.作用 (1)消息提示对话框 (2)简单列表对话框 (3)单选列表对话框 (4)多选对话框 (5)自定义对话框 3.java后台代码 package com.lucky.test28dia ...

  3. Android对话框(Dialog)

    Android对话框 前几天出差没有进行更新,今天写一下安卓中用的比较多的对话框——AlertDialog. dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一 ...

  4. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...

  5. Android组件系列----ContentProvider内容提供者

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Android对话框和帧动画

    Android对话框 在一个例子中展示四种对话框. 设置四个按钮 <LinearLayout xmlns:android="http://schemas.android.com/apk ...

  7. android学习十二(android的Content Provider(内容提供器)的使用)

    文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...

  8. Android 应用程序之间内容分享详解(一)

    一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...

  9. Android 应用程序之间内容分享详解(二)

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...

随机推荐

  1. SpringMVC集成Mybatis

    1.pom.xml中添加引入架包 <dependency> <groupId>mysql</groupId> <artifactId>mysql-con ...

  2. vuex : 模块化改造

    我们知道,vuex是vue技术栈中很重要的一部分,是一个很好用的状态管理库. 如果你的项目没有那么复杂,或者对vuex的使用没有那么重度,那么,是用不着modules功能的. 但如果你写着写着就发现你 ...

  3. 【JVM之内存与垃圾回收篇】方法区

    方法区 前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈.堆.方法区 ...

  4. 理解Linux的硬链接与软链接-转载

    理解Linux的硬链接与软链接 来自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

  5. springboot(五)使用FastJson返回Json视图

    FastJson简介: fastJson是阿里巴巴旗下的一个开源项目之一,顾名思义它专门用来做快速操作Json的序列化与反序列化的组件.它是目前json解析最快的开源组件没有之一!在这之前jaskJs ...

  6. 【IJCAI2020】Split to Be Slim: An Overlooked Redundancy in Vanilla Convolution

    Split to Be Slim: An Overlooked Redundancy in Vanilla Convolution, IJCAI 2020 论文地址: https://arxiv.or ...

  7. Python(set/list/dict/tuple)

    set集合:set是一个无序,不重复元素的集合.可嵌套列表,字典(可以for循环或者迭代的对象). ######差集: a={11,22} b={22,33} c=a.difference(b) #a ...

  8. transaction already active

    这个问题是使用spring 事务管理时经常出现的错误,最开始时相当令我头疼,也不知道是哪里出现的问题.在网上找了一阵后,依然无解.意思就是说上一个事务处于激活状态中,不能开始新的数据库更新操作. // ...

  9. break statement not within loop or switch报错

    break statement not within loop or switch. 注意你的循环,可能多加了个分号.for语句后面?

  10. 第十一章 容器类&新日期时间

    11.1.Optional 容器类 11.1.1.概述 Optional 类是一个容器类,代表一个值存在或不存在, 原来用 null 表示一个值不存在,现在 Optional类 可以更好的表达这个概念 ...