Android——对话框、通知
来源:互联网 发布:inpho软件中文说明 编辑:程序博客网 时间:2024/05/16 18:49
Toast类
Android中的Toast是一种简易的消息提示框。
Toast是一个包含用户点击消息。Toast类会帮助你创建和显示这些。
当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽量不引起人的注意,同时还向用户提供信息,希望他们看见。而且Toast显示时间有限,Toast会根据用户设置的是显示时间后自动消失。
使用这个类的最简单的方法是调用静态方法构造自己需要的一切,并返回一个新的Toast对象。
使用静态方法创建
//静态方法可以创建一个简单的Toastpublic static Toast makeText(Context context,CharSequence text,@Duration int duration)//context 代表上下文//text 代表你要显示的文本//duration 代表时间,一般使用常量,也可以使用毫秒数。 //LENGTH_SHORT 短 //LENGTH_LONG 长
示例:
//使用静态方法创建Toast toast = Toast.makeText(this,"你好,Toast",Toast.LENGTH_SHORT);//将Toast显示到屏幕上toast.show();
Toast的默认显示位置屏幕的下方,如果需要改变位置,那么可以调用Toast的公开方法
public void setGravity(int gravity,int xOffset,int yOffset) //gravity 显示的位置,它是一个常量,来自于android.view.Gravity //offset 代表想x,y的偏移量
使用构造方法创建
Toast也可以使用构造方法去创建,但是必须手动设置(setView)和显示时间(setDuration)。
//初始化ToastToast toast = new Toast(this);//设置显示时间,可以选择Toast.LENGTH_LONG或者Toast.LENGTH_SHORTtoast.setDuration(Toast.LENGTH_LONG);//承载一个TextView,用来显示文字TextView view = new TextView(this);//设置TextView的值view.setText("这是一个TextView提示");//设置TextView的布局view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)); //Toast承载该TextViewtoast.setView(view);//显示Toasttoast.show();
setView中虽然显示可以给定很复杂的界面,但是一般Toast只是为了显示一些不重要的信息,重要的信息一般是使用Dialog来提示用户
Toast的优点
- 没有焦点,它不能和用户进行任何的交互,只能显示
- 自动关闭,时间到了自动消失
- 自带淡入淡出的动画
Toast的缺点
- 排队。如果短时间多次弹出的信息,不要使用Toast。
- 显示不重要的信息,经常被忽略。
Dialog类
一个对话框一般是出现在当前的Activity上的一个小窗口。处于下面的Activity失去焦点,对话框接受所有用户的交互。对话框一般用于提示信息和当前应用程序直接相关的小功能。
Android API支持的对话框
- 警告对话框(AlertDialog):一个可以有0到3个按钮,一个单选框或者复选框的列表的对话框。警告对话框可以创建大多数的交互界面。
- 进度对话框(ProgressDialog):显示一个进度环或者一个进度条。由于它是AlertDialog的扩展,所以它也支持按钮。
- 日期选择对话框(DatePickerDialog):让用户选择一个日期。
- 时间选择对话框(TimePickerDialog):让用户选择一个时间。
我们还可以自定义Dialog,创造一些我们自己喜欢的对话框。
警告对话框(AlertDialog)
AlertDialog是Dialog的一个直接子类,使用AlertDialog,我们可以显示一个标题,最多显示3个按钮操作,以及一组选择框或者是自己定义的弹出框。AlertDialog使用了Builder设计模式来创建对象
AlertDialog的设置区域
区域1就是定义弹出框的头部信息,包括标题名或者一个图标。
setTitle: 为对话框设置标题setIcon : 为对话框设置图标
区域2就是AlertDialog对话框content部分,在这里我们可以设置一些message信息,或者定义一组选择框,还可以定义我们自己的布局弹出框
setMessage: 为对话框设置内容,如果设置了其他内容,那么Message不要设置,否者只显示MessagesetView: 给对话框设置自定义ViewsetItems: 设置对话框要显示的一个list,一般用于显示几个命令时 //public Builder setItems(CharSequence[] items, final OnClickListener listener) //items 是传入一个字符串数组,或者是R文件中的数组setSingleChoiceItems: 用来设置对话框显示一系列的单选按钮 //public Builder setSingleChioceItems(CharSequence[] items,int checkedItems,final OnClickListener listener) //items 是传入一个字符串数组,或者是R文件中的数组 //checkeItems是一个boolean数组,代表列表中的所有项的初始勾选状态
区域3是Action Buttons部分,这里我们定义操作按钮。
在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons可以选择:
setPositiveButton(CharSequence text,DialogInterface.OnClickListener listener)//这是一个相当Ok、确定的操作的按钮。setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)//这是一个相当于取消操作的按钮。setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)//这个是相当于一个忽略操作的按钮。
AlertDialog的监听事件
在AlertDialog的各种设置中,都会有DialogInterface.OnClickListener,比如按钮,内容区的items,单选按钮等,只有多选按钮是用了另一个监听DialogInterface.OnMultiChoiceClickListener。
public void onClick(DialogInterface dialog,int which)//dialog当前点击的dialog//which 哪一个?相当于position(按钮为-1,其他为position)//多选按钮监听public void onClick(DialogInterface dialog,int which,boolean isChecked);//which代表items,多选按钮中的序号//isChecked代表当前which是否被勾选
AlertDialog还支持ListAdapter的子类,我们可以传入各种ListAdapter的子类,来显示复杂的列表,当然直接使用 setView 也可以办到
public Builder setAdapter(final ListAdapter adapter, finalOnClickListener listener)
进度条对话框(ProgressDialog)
ProgressDialog是AlertDialog类的子类,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。它的用处非常广泛,在每次用户操作一个延迟的任务时,我们必须以进度对话框的形式告诉用户,否者用户并不知道操作已经开始,可能会多次操作同一个任务,并且有可能导致异常发生。
构造方法和常用方法
public ProgressDialog(Context context) //构造方法需要一个上下文public void setProgressStyle(int style) //给定一个样式,带进度条和不带进度条的样式 //可选值 //STYLE_SPINER 默认,圆形,没有进度条的样式 //STYLE_HORIZONTAL 给定进度条的样式public void setMax(int max) //设置进度最大值,需要给定STYLE_HORIZONTALpublic void setCancelable(boolean flag) //是否能用返回键关闭,true可以关闭,false不能关闭public void setNessage(CharSequence message) //设置一个消息public boolean isShowing() //判断Dialog是否显示public void dismiss() //关闭对话框//ProgressDialog从AlertDialog中继承的常用方法setIcon和setTitile //虽然ProgressDialog可以设置Button,但是我们一般都不会去使用它
日期与时间选择器对话框
DatePickerDialog与TimePickerDialog都继承AlerDialog,基本方法和DatePicker和TimePicker组件一样,只是需要调用Dialog的show方法显示。在构造方法里需要回调监听
public interface OnTimeChangeListener{ void onTimeChanged(TimePicker view,int hourOfDay,int minute); //用户改变时间后的监听}public interface OnDataChangedListener{ void onDateChanged(DataPicker view,int year,int mothOfYear,int dayOfMonth); //用户改变日期后的监听}
通知(Notification)
Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。
它是一种让你的应用程序在没有开启情况下或在后台运行警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。
状态栏和状态条
- 状态条就是手机屏幕最上方的一个条形状的区域:
在状态条有好多信息量,比如usb连接图标,手机信号图标,电池电量图标,时间图标等等; - 状态栏就是手从状态条滑下来的可以伸缩的view:
在状态栏中一般有两类(使用FLAG_标记):
(1)正在进行的程序
(2)通知事件
大概来描述创建一个Notification传送信息有
- 一个状态条图标
- 在拉伸的状态栏窗口中显示带有大标题,小标题,图标的信息,并且有处理该点击事件:比如调用该程序的入口
- 闪光,LED,或者震动
内容信息如下:
下面对Notification中的常量,字段,方法的简单介绍一下:
DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等
DEFAULT_LIGHTS 使用默认闪光提示
DEFAULT_SOUNDS 使用默认提示音
DEFAULT_VIBRATE 使用默认手机震动
需要注意的是手机震动的时候,需要在mainifest.xml中加入权限: <uses-permission android:name="android.permission.VIBRATE" />
设置flag位
FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉FLAG_ONGOING_EVENT 通知放置在正在运行FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
常用字段:
contentIntent 设置PendingIntent对象,点击时发送该Intentdefaults 添加默认效果flags 设置flag位,例如FLAG_NO_CLEAR等icon 设置图标sound 设置声音tickerText 显示在状态栏中的文字when 发送此通知的时间戳
创建Notification
一个notification不必对上面所有的选项都进行设置,但有3项是必须的:
- 小图标 setSmallIcon()
- 内容标题 setContentTitle()
- 内容 setContentText()
NotificationManager
通知一般通过NotificationManager服务来发送一个Notification对象来完
成,NotificationManager是一个重要的系统级服务,该对象位于应用程序的框架层中,应用
程序可以通过它像系统发送全局的通知。这个时候需要创建一个Notification对象,用于承载
通知的内容。
快速创建一个Notification的步骤简单可以分为以下四步:
- 实例化一个Notification.Builder对象;
- 调用builder的相关方法对notification进行上面提到的各种字段;
- 调用builder.build()方法此方法返回一个notification对象。
- 实例化一个NotificationManager对象;
- 调用manager的notify方法。
更新和移除通知
在使用NotificationManager.notify()发送通知的时候,需要传递一个标识符,用于唯一标识这个通知。对于有些场景,并不是无限的添加新的通知,有时候需要更新原有通知的信息,这个时候可以重写构建Notification,而使用与之前通知相同标识符来发送通知,这个时候旧的通知就被被新的通知所取代,起到更新通知的效果。
对于一个通知,当展示在状态栏之后,但是使用过后,如何取消呢?Android为我们提供两种方式移除通知,一种是Notification自己维护,使用setAutoCancel()方法设置是否维护,传递一个boolean类型的数据。另外一种方式使用NotificationManager通知管理器对象来维护,它通过notify()发送通知的时候,指定的通知标识Id来操作通知,可以使用cancel(int)来移除一个指定的通知,也可以使用cancelAll()移除所有的通知。
NotificationManager常用
public void canceAll();//移除所有的通知(只是针对当前Context下的Notification)public void cancel(int id)//移除标记为id的通知(只是针对当前的Context下的所有Notification)public void notify(String tag,int id,Notification notification)//将通知加入状态栏,标签为tag,标记idpublic void notify(int id,Notification notification)
PendingIntent
对于一个通知而言,它显示的消息是有限的,一般仅用于提示一些概要信息。但是一般简短的消息,并不能表达需要告诉用户的全部内容,所以需要绑定一个意图,当用户点击通知的时候,调用一个意图展示出一个Activity用来显示详细的内容。而Notification中,并不使用常规的Intent去传递一个意图,而是使用PendingIntent。
根据字面意思就知道是延迟的intent,主要用来在某个事件完成后执行特定的Action。
PendingIntent包含了Intent及Context,所以就算Intent所属程序结束,PendingIntent依然有效,可以在其他程序中使用
常用在通知栏及短信发送系统中。
PendingIntent一般作为参数传给某个实例,在该实例完成某个操作后自动执行PendingIntent上的Action,也可以通过PendingIntent的send函数手动执行,并可以在send函数中设置OnFinished表示send成功后执行的动作。
PendingIntent提供了多个静态的getXxx()方法,用于获得适用于不同场景的PendingIntent对象。一般需要传递的几个参数都很常规,只介绍一个flag参数,用于标识PendingIntent的构造选择:
FLAG_CANCEL_CURRENT: 如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。FLAG_NO_CREATE: 如果前一个PendingIntent已经不存在了,将不再构建它 .FLAG_ONE_SHOT: 表明这里构建的PendingIntent只能使用一次FLAG_UPDATE_CURRENT: 如果构建的PendingIntent已经存在,则替换它,常用。
Intent和PendingIntent的区别
- Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel
- Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效
- PendingIntent自带Context,而Intent需要在某个Context内运行
- Intent在原task中运行,PendingIntent在新的task中运行
自定义布局notification
自定义布局notification
和Toast一样,通知也可以使用自定义的XML来自定义样式,但是对于通知而言,因为它的全局性,并不能简单的通过inflate膨胀出一个View,因为可能触发通知的时候,响应的App已经关闭,无法获取当指定的XML布局文件。所以需要使用单独的一个RemoteViews类来操作
RemoteViews类
RemoteViews 类描述了一个View对象能够显示在其他进程中,可以融合从一个layout资源文件实现布局。
实例化一个RemoteViews
//构造方法RemoteViews(String packageName, int layoutId)//通过指定的布局文件新建一个RemoteViews对象。
监听事件
public void setOnClickPendingIntent (int viewId, PendingIntent pendingIntent)//相当于调用View.OnClickListener启动准备好的PendingIntent。当在集合中设置条目的onClick动作时不起作用。//viewId 当点击时将要触发PendingIntent的视图的id//pendingIntent 当点击时传过去的PendingIntent
最后使用Notification.Builder.setContent(RemoteViews)方法设置它到一个Notification中。
示例
发送一条带有TextView的通知:
//创建一个RemoteView视图
RemoteViews contentView = new RemoteViews(getPackageName(),android.R.layout.simple_list_item_1);
//设置布局中的TextView为红色,并设置文字。
contentView.setTextViewText(android.R.id.text1, “测试”);
contentView.setTextColor(android.R.id.text1, Color.RED);
Notification notify = new Notification.Builder(this).setSmallIcon(R.drawable.ic_launcher)
.setContent(contentView)
.setTicker(“标题”).build();
- Android——对话框、通知
- Android开发笔记——对话框和通知
- Android通知之普通对话框通知
- Android通知之列表对话框通知
- Android通知之单选对话框通知
- Android通知之多选对话框通知
- Android通知之进度条对话框通知
- 第八章—对话框、通知(一)
- Android对话框通知(Dialog Notification)
- Android 对话框通知(Dialog Notification)
- Android 菜单、通知、对话框、Toast
- android之对话框通知栏:
- android通知对话框、多选对话框、单选对话框
- Android—(通知、闹钟)
- Android中的通知:Toast,对话框,状态栏
- 第八章—对话框、通知(二)Toast
- 对话框通知
- Android——对话框
- ios之UILabel显示不同的颜色字体
- Android.mk文件解读
- fread读优
- 观察者模式
- 接口
- Android——对话框、通知
- Leetcode每日一练习
- centos系统下为python安装MySQLdb库
- 星号*玩法升阶 输出菱形
- Android中获取状态栏高度的有效方法
- 【luogu1080】国王游戏(高精度)
- 运算方法和运算器
- 【二叉树经典问题】105. Construct Binary Tree from Preorder and Inorder Traversal
- JSTL标签引入