跟我学Android之十 对话框

举报
tea_year 发表于 2021/12/29 23:56:25 2021/12/29
【摘要】 视频课:https://edu.csdn.net/course/play/7621 本章内容 第1节  Toast提示框第2节  AlertDialog对话框第3节  特色对话框第4节  自定义对话框 本章目标 熟练掌握 Toast 的用法。 熟练掌握 ...

视频课:https://edu.csdn.net/course/play/7621

本章内容

第1节  Toast提示框
第2节  AlertDialog对话框
第3节  特色对话框
第4节  自定义对话框

本章目标

熟练掌握 Toast 的用法。
熟练掌握 Dialog 的用法。
掌握几种常用的特色对话框的用法。
掌握自定义对话框的方法。
掌握 Notification 的用法。

Toast 是一种浮于屏幕最上层,用于显示消息的窗体,u 主要用于显示各种动作的提示信息,比如:
Ø 正在编写的邮件自动保存到了草稿箱
Ø 删除某条通讯了成功了
u Toast 窗体只是占据一部分的屏幕窗口
u 当前的 Activity 依然保持存在并能与用户交互
u Toast 在显示一段时间超时后会自动关闭



构建 Toast 消息
u 1 、通过 Toast.makeText () 方法创建一个 Toast 对象

  
  1. Context context = getApplicationContext();
  2. CharSequence text = "Hello toast!";
  3. int duration = Toast.LENGTH_SHORT;
  4. Toast toast = Toast.makeText(context, text, duration);

Ø duration 参数表示 Toast 显示的超时时间设定,可以取值如下:
l Toast.LENGTH_SHORT 短时间显示(大约 2 秒)
l Toast.LENGTH_LONG 长时间显示(大约 3.5 秒)
u 2 、通过 Toast.show () 方法显示 Toast 窗体
u

调整 Toast 的显示位置
u 默认情况下, Toast 显示在屏幕底部,水平居中的位置
u 通过 Toast.setGravity () 方法可以修改显示位置,支持三个参数
Ø 第一个参数 gravity :接收一个 Gravity 常量,可以是常量的组合
Ø 第二个参数是 x 方向的偏移量
Ø 第三个参数是 y 方向的偏移量
toast .setGravity(Gravity.TOP|Gravity.LEFT, 20, 30);

 

Toast 的外观除了默认情况外,也可以进行定制
u 1 、为 Toast 中显示的内容定制一个视图布局( toast_layout.xml



  
  1. <LinearLayout ……>
  2. <TextView android:id="@+id/text"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:textColor="#FFF"
  6. </LinearLayout>

u 2 、采用动态加载的办法在程序中为 Toast 使用定制布局


  
  1. LayoutInflater li = getLayoutInflater();
  2. View layout = li.inflate(R.layout.toast_layout_root, null);
  3. TextView tv = (TextView)layout.findViewById(R.id.text);
  4. tv.setText("custom toast");
  5. Toast t = new Toast(getApplicationContext());
  6. t.setGravity(Gravity.CENTER, 0, 0);
  7. t.setDuration(Toast.LENGTH_SHORT);
  8. t.setView(layout);
  9. t.show();

Dialog 是一个让用户做一个决定或者输入一些信息的窗口, 对话框通常不充满屏幕, Toast 不同,对话框不会自动关闭, 对话框出现时,当前 Activity 的界面继续显示但不能进行交互, 对话框不是一个视图,基类是 Dialog 继承自 Object


对话框的创建方法有多种
u Android 系统提供了很多对话框的类用于创建各种对话框
Ø android.app.AlertDialog
Ø android.app.DatePickerDialog
Ø android.app.TimePickerDialog
Ø android.app.ProgressDialog
u 自主定义对话框内容
u 通过 AlertDialog 创建对话框是最常用的办法

AlertDialog Dialog 的直接子类
u 包含一个标题
u 包含一个文本消息
u 可以管理 0 3 个按钮
u 可以包含单选列表和多选列表
u 不能直接创建对象,需要使用 AlertDialog.Builder
u
u

使用 AlertDialog
u 创建 AlertDialog 对象


  
  1. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  2. AlertDialog alert = builder.create();

u 使用 Builder 对象的 setTitle () 方法设置标题内容

builder.setTitle(“信息提示”);

u 使用 Builder 对象的 setMessage () 方法设置消息内容

builder.setMessage (“信息提示”);

使用 AlertDialog, 添加按钮


  
  1. builder.setPositiveButton("Yes", new
  2. DialogInterface.OnClickListener() {
  3. public void onClick(DialogInterface dialog, int id) {
  4. MyActivity.this.finish();
  5. }
  6. })
  7. .setNegativeButton("No", new
  8. DialogInterface.OnClickListener() {
  9. public void onClick(DialogInterface dialog, int id) {
  10. dialog.cancel();
  11. }
  12. }
  13. );

简单列表对话框相当于将 ListView 组件放在对话框上
u 通过 AlertDialog.Builder 中的 setItems () 设置内容和事件监听


  
  1. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  2. builder.setTitle("请选择你最喜欢的运动");
  3. builder.setItems(items, new OnClickListener() {
  4. public void onClick(DialogInterface dialog, int which) {
  5. show.setText("你选中了《" + items[which] + "》");
  6. }
  7. });
  8. builder.create().show();

简单列表对话框相当于将 ListView 组件放在对话框上, 运行后的效果图


单选列表对话框用于显示单选列表
u 通过 Builder 中的 setSingleChoiceItems () 设置内容和事件监听



  
  1. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  2. builder.setSingleChoiceItems(items, 1, new OnClickListener()
  3. {
  4. public void onClick(DialogInterface dialog, int which)
  5. {
  6. show.setText("你选中了《" + items[which] + "》");
  7. }
  8. });
  9. builder.setTitle("请选择要使用的情景模式");
  10. builder.create().show();

单选列表对话框用于显示单选列表, 运行后的效果图



复选列表对话框用于显示复选项列表, 通过 Builder 中的 setMultiChoiceItems () 设置内容和事件监听



  
  1. final boolean[] checkedItems= new boolean[] { false, true, false,true, false };
  2. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  3. builder.setTitle("请选择您喜爱的游戏");
  4. builder.setMultiChoiceItems(items, checkedItems,
  5. new OnMultiChoiceClickListener() {
  6. public void onClick(DialogInterface dialog, int which, boolean isChecked) {
  7. checkedItems[which]=isChecked; //改变被操作列表项的状态 }
  8. });
  9. builder.create().show();

复选列表对话框用于显示复选项列表
u 运行后的效果图



定义 列表对话框用于显示自定义列表, 通过 Builder 中的 setAdapter () 设置列表项内容



  
  1. final String[] items = new String[] { "迈巴赫","布加迪","法拉利","保时捷"};
  2. AlertDialog.Builder builder = new AlertDialog.Builder(this)
  3. .setTitle("自定义列表项对话框")
  4. .setIcon(R.drawable.tools)
  5. .setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1
  6. , items), new OnClickListener() { public void onClick(DialogInterface dialog, int which) {
  7. show.setText("你选中了《" + items[which] + "》");
  8. }
  9. });
  10. builder.create().show();

自定义列表对话框用于显示自定义列表, 运行后的效果图


自定义对话框的实现思路
u 所谓自定义就是要摆脱对话框的固有模式,显示自定义的设计
u 首先需要做的是通过布局的方式将自定义内容的布局设计出来
Ø 一般会在 res/layout 下通过 xml 文件存放自定义的设计
u 然后通过对话框提供的能力将自定义的布局显示在对话框中
u AlertDialog 类提供了使用自定义内容的基础


通过 AlertDialog 类实现自定义对话框
u AlertDialog Dialog 的子类,完全具备了 Dialog 的特性
u 对于 Dialog 来讲,如果没有设置 Title Title 位置依然空白存在
Ø AlertDialog 可以解决这个问题
u 使用 AlertDialog 加载自定义布局的示例如下:



  
  1. LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
  2. View layout = inflater.inflate(R.layout.custom_dlg, null);
  3. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
  4. builder.setView(layout);
  5. AlertDialog alertDialog = builder.create();
  6. alertDialog.show();


自定义对话框, 示例运行效果


对话框风格的窗口

这种对话枢本质上依然是窗口,只是把显示窗口的 Activity 的风格设为对话枢风格即 可, 需要 先增加 Activity, 在清单文件中进行设置



  
  1. <activity
  2. android:name="com.aaa.ui.DialogTheme"
  3. android:theme="@android:style/Theme.Dialog"
  4. android:label="@string/app_name">
  5. <intent-filter>
  6. <action android:name="android.intent.action.MAIN" />
  7. <category android:name="android.intent.category.LAUNCHER" />
  8. </intent-filter>
  9. </activity>

自定义对话框
u 示例运行效果




文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/51841863

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。