安卓018 Dialog & Toast & Notification & Menu

来源:互联网 发布:淘宝交易额多少了 编辑:程序博客网 时间:2024/06/07 19:49


一、  通过 Toast  显示消息提示框

Toast 类用于在屏幕中显示一个可以消息提示框,该消息提示框没有任何控制按钮,并
且不会获得焦点,经过一定时间后自动消失,通常用于显示一些快速提示信息,应用范围非
常广泛
语法:
1, Context context = getApplicationContext();
CharSequence text ="Hello toast!";
int duration =Toast.LENGTH_SHORT;
Toast toast =Toast.makeText(context, text, duration);
toast.show();
Toast toast=new Toast(this);
Toast toast=Toast.makeText(this, "要显示的内容", Toast.LENGTH_SHORT);
Toast.show();
注意:调用 Toast  类的 show() 方法显示消息提示框,需要注意的是,一这要调用该方法,
否则设置的消息提示框将不会显示。
常用方法:
方法  描述
setDuration(int duration)  用 于 设 置 消 息 提 示 持 续 的 时 间 , 通 常 使 用
Toast.LENGTH_LONG 或 Toast.LENGTH_SHORT 参数值
setGravity(int gravity,int xOffset,int
yOffset)
用于设置消息提示框的位置,参数 gravity 用于指定
对齐方式,xOffset 和 yOffset 用于指定具体的偏移值
setMargin(float
horizontalMargin,float
verticalMargin)
用于设置消息提示的页边距
setText(CharSequence s)  用于设置要显示的文本内容
setView(View view)  用于设置将要在消息提示框中显示的视图
效果图 :

二、  使用 AlertDialog  实现对话框

AlertDialog 类的功能非常强大,它不仅可以生成带按钮的提示对话框,还可以生成带列
表的列表对话框,使用 AlertDialog 可以生成对话框概括起来有四种
1, 带确定,中立和取消三个按钮的提示对话框,其中的按钮个数不是固定的,可以根据需
要添加。
2, 带列表的列表对话框
3, 带多个单选列表项和 N 个按钮的列表对话框
4, 带多个多选择列表项和 N 个按钮的列表对话框
常用方法:
方法  描述
setTitle(CharSequence title)  用于为对话框设置标题
setIcon(Drawable icon)  用于为对话框设置图标
setIcon(int resId)  用于为对话框设置图标
setMessage(CharSequence
message)
用于为提示对话框设置要显示的内容
setButton()
用于为提示对话框添加按钮,可以是取消按钮、中立按
钮 和 确 定 按 钮 。 需 要 通 过 为 其 指 定 int 类 型 的
whichButton 参 数 实 现 , 其 参 数 值 可 以 是
DialogInterface.BUTTON_POSITIVE ( 确 定 按 钮 )、
BUTTON_NEGATIVE(取消按钮)或者 BUTTON_NEUTRAL
(中立按钮)
通常情况下,使用 AlertDialog 类只能生成带 N 个按钮的提示对话框,要生成另外三种列表
的对话框,需要使用 AlertDialog.Builder 类,AlertDialog.Builder 类提供常用方法如下:
方法  描述
setTitle(CharSequence title)  用于为对话框设置标题
setIcon(Drawable icon)  用于为对话框设置图标
setIcon(int resId)  用于为对话框设置图标
setMessage(CharSequence
message)
用于为提示对话框设置要显示的内容
setNegativeButton()  用于为对话框添加取消按钮
setPositiveButton()  用于为对话框添加确定按钮
setNeutralButton()  用于为对话框添加中立按钮
setItems()  用于为对话框添加列表项
setSingleChoiceItems()  用于为对话框添加单选列表项
setMultiChoiceItems()  用于为对话框添加多选列表项
setView()  给弹出框设置自定义布局
案例截图

三、  使用 Notification  在状态栏上显示通知

定义:
一种可以显示即时信息的控件,该控件显示在标题栏中,拉开后会看到通知的完整样式
Notification 和 NotificationManager。来处理状态栏的推送信息,使用它俩发送显示通
知分四个步骤
调用 getSystemService()方法获取系统的 NotificationManager 服务
创建一个 Notification 对象,并为其设置种属性
为 Notification 对象设置事件信息
通过 NotificationManager 类的 notify()发送 Notification 通知
通过 NotificationManager 的 manager.cancel(NOTIFYID_1);可以清除通知
3.1  普通通知
(1)使用普通通知的必须选项:
①添加标题,使用 setContentTitle()方法
②设置图标,使用 setSmallIcon()方法
③添加内容,使用 setContentText()方法
(2)可选项
①setDefaults(系统默认铃声 | 系统默认震动)
②setTicker(设置标题栏显示的内容,一般为 contentText)
(3)创建通知的步骤
①定义 NotificationCompat.Builder 对象
②设置必须选项和可选项
(4)发布通知
NotificationManager.notify(id,notification) .
id→每个通知都有一个唯一的 id
notification→通知对象,而非 NotificationCompat.Builder 对象,通过调用
builder.build()方法得到
(5)点击事件
①使用 PendingIntent,具体方法如下
getActivity(Context context, int requestCode, Intent intent, int flags)
context:获得上下文对象
requestCode:获得另外一个 Activity 的返回码
intent:PendingIntent 需要触发的事件,比如跳转 Activity
flags:通知标志位
②使用 setContentIntent(PendingIntent)将封装好的 PendingIntent 对
象放入该方法中
Intent intent=new Intent(MainActivity.this,ContentActivity.class);
PendingIntent
pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
builder.setContentIntent(pendingIntent);
3.2  大视图通知
注意:4.1 以下的版本不支持大视图
①先创建一个简单通知
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.alerm);
mBuilder.setContentTitle("Event tracker");
mBuilder.setContentText("Events received");
②使用 NotificationCompat.InboxStyle 对象设置大视图通知的样式,代码如下:
NotificationCompat.InboxStyle inboxStyle =new
NotificationCompat.InboxStyle();
// 设置大视图标题
inboxStyle.SetBigContentTitle("Event tracker details:");
// 为大视图添加事件内容
for(int i=0; i < 5; i++){
inboxStyle.addLine("details:"+i);
}
③使用 setStyle 方法将 InboxStyle 对象放进去
mBuilder.setStyle(inBoxStyle);
1.NotificationCompat.InboxStyle 收件箱风格:显示多行文字
2.NotificationCompat.BigPictureStyle 大图片风格:详情区域包含一个 256dp 高度的位

3.NotificationCompat.BigTextStyle 大文字风格:显示一个大的文字块
3.3  进度条通知
当下载的时候,在通知栏显示一个进度条的通知
①创建一个普通通知
②开一个线程,在该线程中使用 setProgress(进度值的最大值,当前进度值,false),在 notify
方法即时通知进度条,代码如下:
mBuilder.setProgress(100, incr,false);
mNotifyManager.notify(0, mBuilder.build());
3.4  自定义通知
①创建一个普通通知
②创建一个自定义布局文件,后缀为 xml
③创建一个 RemoteViews 对象,将 xml 布局加载到该对象中,代码如下:
RemoteViews content = new RemoteViews(getPackageName(), R.layout.item);
④使用 setContent(content)方法,将 RemoteViews 对象加载到普通通知对象中
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentTitle("自定义");
RemoteViews views = new RemoteViews(getPackageName(), R.layout.activity_content);
builder.setContent(views);
manager.notify(1, builder.getNotification());

四、 Menu  菜单的使用

定义:当用户点击手机 menu 键会弹出菜单,菜单在 2.3 系统中最多显示 6 项,在 4.0 系统中
会根据屏幕的高度决定菜单的项数。
2.3  中
4.0  中
OptionsMenu:
(1) 代码中:
①重写 public boolean onCreateOptionsMenu(Menu menu) {....}方法
②创建菜单项:menu.add(0, 1, 5, "一");
第一个参数为 GroupID,Group 即将菜单项分组
第二个参数为 ItemID,指的是菜单项的 id
第三个参数为 order,指定菜单项的位置顺序
第四个参数为 title,指的是菜单项所显示的文字
注意:返回值为 true,表示当用户按下 menu 键时会调用系统提供的 menu,为 false 为调用
自定义的菜单。
③监听器
重写 onOptionsItemSelected 方法
(2)XML  中:
①xml 文件位置:res/menu 文件夹下
②写法
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game"
android:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help"/>
</menu>
a.创建菜单 xml,必须以 menu 为根标签
b.item 标签为菜单项
c.android:id 表示 item 的 id
d.android:icon 表示菜单的图标,4.0 系统仅在 ActionBar 上显示图标
e.android:title 表示菜单的文字
f.showAsAction 表示是否将 item 显示在 ActionBar 上, 仅 仅 4.0  系统可以显示
※子菜单
<?xml version="1.0" encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/file"
android:title="@string/file">
<!-- "file" 的子菜单 -->
<menu>
<item android:id="@+id/create_new"
android:title="@string/create_new"/>
<item android:id="@+id/open"
android:title="@string/open"/>
</menu>
</item>
</menu>
注意:item 必须是双标签,将 menu 子菜单放到 item 标签中
③在 Activity 中引入 xml
@Override
publicboolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater() ;
inflater.inflate(R.menu.xxx, menu);
returntrue;
}
Context Menu
1.重写方法:
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.clear();//清除系统的 ContextMenu,主要针对 2.3.x 系统
if (v == findViewById(R.id.editText1)) {
menu.setHeaderIcon(R.drawable.ic_launcher);//为上下文菜单添加图标
menu.setHeaderTitle("性别");//为上下文菜单添加标题
menu.add(0, 0, 0, "男");//设置菜单项,同 OptionsMenu
menu.add(0, 1, 0, "女");
}
}
2.点击事件:
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case 0:
et.setText(item.getTitle());
break;
case 1:
et.setText(item.getTitle());
break;
}
return true;
}
3.注册:
this.registerForContextMenu(需要显示 ContextMenu 的控件);














0 0