Android中Dialog和Toast及其Snackbar的使用和区别

2023-05-16

一.Snackbar的使用

连接地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0714/3187.html
如果说Dialog和Toast是两个极端的话,那么Snackbar就是处于中间的位置了。Snackbar和Toast比较相似,但是用途更加广泛,并且它是可以和用户进行交互的。Snackbar使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。

在使用Snackbar之前,首先需要在app/build.gradle中添加相应的依赖:

dependencies {
compile ‘com.android.support:design:23.4.0’
}

然后就可以使用Snackbar了,它的用法和Toast是比较相似的:

Snackbar.make(view, “data deleted”,
Snackbar.LENGTH_LONG)
.setAction(“Undo”,
new View.OnClickListener(){
@Override
public void onClick(View v) {
}
})
.show();

这里调用Snackbar的make()方法来创建一个Snackbar对象,make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个view来自动查找最外层的布局,用于展示Snackbar。第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长。这些和Toast都是类似的。

接着这里又调用了一个setAction()方法来设置一个动作,从而让Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。

可以看到,Snackbar的效果有点类似于Toast,不过它是从屏幕底部弹出来的。另外Snackbar上面可以加入和用户交互的按钮,比如删除数据的时候给用户一个Undo的选项,从这些小的细节方面都可以提升很多的用户体验。

二.三者的区别总结

现在你有三种方式可以给用户提示信息,Dialog、Toast和Snackbar,下面我们对这三种方式的使用时机做个总结吧。

Dialog:当提示信息是至关重要的,并且必须要由用户做出决定才能继续的时候,使用Dialog。

Toast:当提示信息只是告知用户某个事情发生了,用户不需要对这个事情做出响应的时候,使用Toast。

Snackbar:以上两者之外的任何其他场景,Snackbar可能会是你最好的选择。

三.自定义Dialog的使用

**总体的思路就是:

  • 第一点:我么可以看做一个dialog是一个activity来理解,因为dialog可以自定义,自定义的时候,和anctivity很相似.
  • 第二点:我们通过setContetnView(view)来设置一个想要展示的view来作为自定义的dialog来展示出来.

-第三点:在设置自定义dialog的时候我们设置他的样式

**具体的操作:**

- * 初始化自定义对话框的展示属性:第一个属性是展示的宽度,我们可以获取展示的屏幕的宽度
DisplayMetrics displayMetrics=getcontex().getResourecs().getdisplaymetrices();这个类:Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。这个类中包含当前的宽度,获取displayMetrics.width;就是我们需要设置给自定义dialog的属性,最后自定义的对话框是展示在屏幕上面的,获取窗口的属性,设置dialog的属性;属性就包括对话框的展示的位置和对话框展示的宽度是怎么样子的.
- *获取窗口的属性:
WindowManager.LayoutParams params= getWindow().getAttributes();
- *设置位置 params.gravity = Gravity.bottom; 设置展示的位置
-*设置展示的宽度
params.width = displayMetrics.width;
-*参数变化后重新设置给我窗口
* getWindow()setAttributes(params)**

自定义dialog的代码:

`public class MykeyDialogDemo extends Dialog{
private Button mShow;
private Button mSend;
//首先是自定义对框的设置,第一点就是继承dialog
//里面的构造方法和一般的自定义控件是不相同的
//第一个参数实在直接new的时候获取的
//第二个参数是直接定义了一个style来设置的,我们在这里可以直接给自定义控件设置一个样式:样式中包包括的是背景和是自定义dialog
//是否是需要tittle后名就是在这行这个自定义的dialog的时候是的一些自定义的动画,注意我们常见的自定义dialog是宽和高都是固定好的
//我们需要自定义初始化对话框的高度和位置
//就在设置自定义对话框的样式扥那个构造方法里面来设定,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //转化一个view
    View view = View.inflate(getContext(), R.layout.mdialogshowview, null);
    setContentView(view);
    //初始化对话框的一些展示属性
    //获取屏幕的宽度,设置展示的屏幕的信息

//Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。

    DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
    //获取框

    int widthPixels = metrics.widthPixels;
    // 获取窗口管理
    //在获窗口的属性
    //设置属性

    //将获取的屏幕的宽度设置给自定义对话框的展示

    //重新设置属性

    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.gravity= Gravity.BOTTOM;

    params.width=widthPixels;
    getWindow().setAttributes(params);
    //初始化控件:
    mShow = (Button) view.findViewById(R.id.btn_show_emotion);
    //获取发送
    mSend = (Button) view.findViewById(R.id.btn_send);


}

public MykeyDialogDemo(Context context) {
    this(context,R.style.CustomDialog);
    //好处就是,在获取自定义对话框的时候,代码获取的时候只传递一个上下文,而不能指定样式,我们在内部设置好了样式

}

public MykeyDialogDemo(Context context, int themeResId) {
    super(context, themeResId);
}

public MykeyDialogDemo(Context context, boolean cancelable, OnCancelListener cancelListener) {
    super(context, cancelable, cancelListener);
}

}`

Demo:地址:
https://github.com/NYK1024212458/CunstomDialogDemo.git

四.自定义Toast

参考图片:
这里写图片描述

连接地址: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0302/945.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中Dialog和Toast及其Snackbar的使用和区别 的相关文章

随机推荐

  • [RK3288][Android6.0] 调试笔记 --- 录音apk无权限录音问题

    Platform Rockchip OS Android 6 0 Kernel 3 10 92 现象 xff1a 写了个apk测试录音 xff0c 提示 xff1a 01 22 00 59 40 795 215 948 W ServiceM
  • 【Linux】Ubuntu 使用指南

    content 1 换清华源2 更新三步走3 1 换清华源 备份 Ubuntu 的软件源配置文件 etc apt sources list span class token function sudo span span class tok
  • ubuntu下解决不能识别外部设备的方法

    首先确认手机连接上电脑 xff0c lsusb查看下设备记录 matthew 64 matthew 1230 laptop lsusb Bus 007 Device 009 ID 18d1 4e12 Bus 007 Device 001 I
  • android json解析及简单例子

    JSON的定义 xff1a 一种轻量级的数据交换格式 xff0c 具有良好的可读和便于快速编写的特性 业内主流技术为其提供了完整的解决方案 xff08 有点类似于正则表达式 xff0c 获得了当今大部分语言的支持 xff09 xff0c 从
  • Ubuntu 16.04 如何安装 Python 3.6

    在Ubuntu 16 04版本中 xff0c 系统默认安装 了python 2 7和3 5版本 xff0c 此次安装的是新版本Python 3 6 13 由于系统已经默认安装了Python xff0c 所以相关的依赖文件已经安装妥善 xff
  • ubnutu桌面环境Gnome 配置tweak tool时看不到extension插件选项

    问题 xff1a tweak tool中没用extension选项 xff0c 这是因为没有开启gnome xff0c 解决方法是注销当前用户 然后在登录窗口的右上角 xff0c 选择gnome xff0c 如下图所示 然后在弹出的窗口中选
  • C# 内存与性能优化

    C 内存与性能优化 https www jianshu com p d56f79d83ebd 前两周分享了资源配置与资源管理 xff0c 今天分享一种特殊的资源脚本数据 在Unity项目中 xff0c 我们通常使用C 编写脚本 xff0c
  • 转发——从搭建小系统到架构分布式

    从搭建小系统到架构分布式 从搭建小系统到架构分布式 SpringBoot是目前Spring技术体系中炙手可热的框架之一 既可用于构建业务复杂的企业应用系统 xff0c 也可以开发高性能和高吞吐量的互联网应用 Spring Boot 框架降低
  • 2018-8-30华为机试第三题

    一个很明显的递归问题 package cn csu ksh import java util ArrayList import java util List import java util Scanner public class Mai
  • Android学习之Sensor

    转自http javatest blog 163 com blog static 20865106420126216118757 只需要五步 xff0c 你就能搞定Sensor 让你的程序变的更酷 java view plain copy
  • 虚拟现实技术vr可以用来干什么?虚拟现实技术vr有什么特征

    科技行业的不断蓬勃发展 xff0c 每天会出现一些新的科技产品 xff0c 例如现在很火的虚拟现实技术vr xff0c 虚拟现实技术用的领域很多 xff0c 就拿游戏行业来说 xff0c 玩家可以通过vr眼镜 vr手柄等体验vr游戏 xff
  • Ubuntu18.04安装Qt5.14.2

    1 去官网 xff08 https download qt io archive qt xff09 下载对应的 run版本 这里是5 14 2 2 进入下载后的路径 xff0c 先赋予权限 xff0c 再安装 span class toke
  • Python归并排序

    归并排序 数据科学家每天都在处理算法 然而 xff0c 数据科学学科作为一个整体已经发展成为一个不涉及复杂算法实现的角色 尽管如此 xff0c 从业者仍然可以从建立对算法的理解和知识库中受益 在本文中 xff0c 对排序算法归并排序进行了介
  • Android ADB 源码分析总结

    Android之ADB总结 本文内容如下 xff1a 1 makefile分析及总结 2 adb框架介绍 3 adbd源码分析 3 1 adbd初始化流程分析 3 2 adb shell流程分析 3 3 adb root流程分析 4 adb
  • android4.0新控件Switch方法解析

    就是很像开关的那种控件 xff0c 它只有两个状态 xff1a on和off xff1a 在IOS中 xff0c 有个UISwitch控件 xff0c 其效果图 xff0c 如下 xff1a 在android4 0里面 xff0c 添加了一
  • Android Adb 源码分析(一)

    扭起屁股得意洋洋 最近 xff0c 我负责的项目因为临近量产 xff0c 把之前的userdebug版本关闭 xff0c 转成了user版本 xff0c 增加selinux的权限 xff0c 大家都洋溢在项目准备量产的兴奋和喜悦之中不能自拔
  • ADB源码分析(一)——ADB模块简述

    原文地址 http www apkbus com blog 50331 54609 html 感谢作者的分享 1 Adb 源码路径 system core adb 2 要想很快的了解一个模块的基本情况 xff0c 最直接的就是查看该模块的A
  • Git分支管理规范

    一 分支与角色说明 Git 分支类型 master 分支 xff08 主分支 xff09 稳定版本 develop 分支 xff08 开发分支 xff09 最新版本 release 分支 xff08 发布分支 xff09 发布新版本 hot
  • Kindeditor编辑器 jsp上传错误解决方法 与struts2冲突整合

    上传使用的是upload json jsp文件 xff0c 问题关键在于struts2对于struts2过滤访问的jsp时 xff0c 会改变reqeust的类型 xff0c 由HttpServletRequest变成MultiPartRe
  • Android中Dialog和Toast及其Snackbar的使用和区别

    一 Snackbar的使用 连接地址 http www jcodecraeer com a anzhuokaifa androidkaifa 2015 0714 3187 html 如果说Dialog和Toast是两个极端的话 xff0c