- 浏览: 702769 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
葫芦瓢:
葫芦瓢 写道专注IT 写道请问楼主demo中为什么是Custo ...
Android Scroller简单用法 -
葫芦瓢:
专注IT 写道请问楼主demo中为什么是CustomView中 ...
Android Scroller简单用法 -
u011493452:
注册账号给楼主点赞!
Android Scroller简单用法 -
jiduoduo:
整理的不错!
Android文件存储 -
xiaofeng0817166:
http://deerchao.net/tutorials/r ...
Java正则表达式应用
用惯了Android的人在刚拿到iPhone的时候,总是会习惯性的用手指从状态栏往下拖一下,这都是给Notification闹的。
不过Notification也确实是1个不错的提示工具,不干扰正常的操作,事后还可以再翻看详细的内容,点击后还可以进入相关的画面查看更具体的内容。
今天我就以代码为主的形式来介绍Notification的使用,包括基本用法,自定义的View,以及更多的控制方法。
我们先看下Notification的几个主要组成部分:
Icon:不解释
Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动
Content Title:Notification展开后的标题
Content Text:Notification展开后的内容
Notification的一般用法
取得NotificationManager
创建Notification并且显示
这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。
使用自定义View的Notification
同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。
首先给出View的定义文件:notification_view_sample.xml
接下来是Java代码片段:
注意以上代码中使用的是RemoteViews,而不是普通的View,另外使用的是PendingIntent而不是普通的Intent,这都说明了Notification是1个“远程”的东西,其中能够使用的控件是受限制的,比如说TableLayout就不能使用。看下效果图,是不是和Market中的界面很接近呢?
更好的控制Notification
动画图标怎么做?
和selector类似,定义1个XML文件放在drawable下,下面是之前用到的stat_sys_download的定义:
如何更新Notification?
注意到前面的代码中用到的CUSTOM_VIEW_ID,这是Notification的ID,如果2次弹出的Notification的ID相同,那么Notification就只会更新而不会再次滚动提醒。之前给出的ProgressBar是不会动的,利用这个方法就可以让它动起来(或者也可以直接调用RemoteView的set方法来直接更新?未试验)
如何自定义提示的声音和振动?
请注意:如果使用了DEFAULT_SOUND或DEFAULT_VIBRATE,则自定义的提示音和振动无效。
在类似于短消息的应用中如何提示数量?
使用Notification的number属性,默认为0,如果是1或更大的数字,则会在图标上覆盖显示这个数字。
Flag的使用
notification有1个flag属性,除了DEFAULT_SOUND之外,还有几个很有用的属性。
FLAG_AUTO_CANCEL:自动清除Notification,前面的例子中有用到
FLAG_INSISTENT:提示音一直不停,直至用户响应(很吵吧!)
FLAG_ONGOING_EVENT:表示这是1个正在进行的任务,不可以清除,第2个例子中有用到
FLAG_NO_CLEAR:不可以清除
不过Notification也确实是1个不错的提示工具,不干扰正常的操作,事后还可以再翻看详细的内容,点击后还可以进入相关的画面查看更具体的内容。
今天我就以代码为主的形式来介绍Notification的使用,包括基本用法,自定义的View,以及更多的控制方法。
我们先看下Notification的几个主要组成部分:
Icon:不解释
Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动
Content Title:Notification展开后的标题
Content Text:Notification展开后的内容
Notification的一般用法
取得NotificationManager
private NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
创建Notification并且显示
//Notification的滚动提示 String tickerText = "My notification, It's a long text! Hello World desiyo?"; //Notification的图标,一般不要用彩色的 int icon = R.drawable.icon_02241_3; //contentTitle和contentText都是标准的Notification View的内容 //Notification的内容标题,拖下来后看到的标题 String contentTitle="My notification"; //Notification的内容 String contentText="Hello World!"; //Notification的Intent,即点击后转向的Activity Intent notificationIntent = new Intent(this, this.getClass()); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); //创建Notifcation Notification notification = new Notification(icon, tickerText, System.currentTimeMillis()); //设定Notification出现时的声音,一般不建议自定义 notification.defaults |= Notification.DEFAULT_SOUND; //设定如何振动 notification.defaults |= Notification.DEFAULT_VIBRATE; //指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身 //这符合一般的Notification的运作规范 notification.flags|=Notification.FLAG_AUTO_CANCEL; notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent); //显示这个notification mNotificationManager.notify(HELLO_ID, notification);
这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。
使用自定义View的Notification
同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。
首先给出View的定义文件:notification_view_sample.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="3dp" > <ImageView android:id="@+id/notificationImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/stat_sys_download" /> <TextView android:id="@+id/notificationTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/notificationImage" android:layout_alignParentRight="true" android:paddingLeft="6dp" android:textColor="#FF000000" /> <TextView android:id="@+id/notificationPercent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/notificationImage" android:paddingTop="2dp" android:textColor="#FF000000" /> <ProgressBar android:id="@+id/notificationProgress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/notificationTitle" android:layout_alignLeft="@id/notificationTitle" android:layout_alignParentRight="true" android:layout_alignTop="@id/notificationPercent" android:paddingLeft="6dp" android:paddingRight="3dp" android:paddingTop="2dp" style="?android:attr/progressBarStyleHorizontal" /> </RelativeLayout>
接下来是Java代码片段:
//Notification的滚动提示 String tickerText1 = "Custom view for download notification"; //Notification的图标,一般不要用彩色的 int icon1 = android.R.drawable.stat_sys_download; //Notification的Intent,即点击后转向的Activity Intent notificationIntent1 = new Intent(this, this.getClass()); notificationIntent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0, notificationIntent1, 0); //创建Notifcation Notification notification1 = new Notification(icon1, tickerText1, System.currentTimeMillis()); //设定Notification出现时的声音,一般不建议自定义 notification1.defaults |= Notification.DEFAULT_SOUND; //设定是否振动 notification1.defaults |= Notification.DEFAULT_VIBRATE; //notification.number=numbers++; //指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身 //这符合一般的Notification的运作规范 notification1.flags|=Notification.FLAG_ONGOING_EVENT; //创建RemoteViews用在Notification中 RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_view_sample); contentView.setTextViewText(R.id.notificationTitle, "Download:Facebook for android"); contentView.setTextViewText(R.id.notificationPercent, "35%"); contentView.setProgressBar(R.id.notificationProgress, 100, 35, false); notification1.contentView = contentView; notification1.contentIntent=contentIntent1; //显示这个notification mNotificationManager.notify(CUSTOM_VIEW_ID, notification1);
注意以上代码中使用的是RemoteViews,而不是普通的View,另外使用的是PendingIntent而不是普通的Intent,这都说明了Notification是1个“远程”的东西,其中能够使用的控件是受限制的,比如说TableLayout就不能使用。看下效果图,是不是和Market中的界面很接近呢?
更好的控制Notification
动画图标怎么做?
和selector类似,定义1个XML文件放在drawable下,下面是之前用到的stat_sys_download的定义:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/stat_sys_download_anim0" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim1" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim2" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim3" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim4" android:duration="200" /> <item android:drawable="@drawable/stat_sys_download_anim5" android:duration="200" /> </animation-list>
如何更新Notification?
注意到前面的代码中用到的CUSTOM_VIEW_ID,这是Notification的ID,如果2次弹出的Notification的ID相同,那么Notification就只会更新而不会再次滚动提醒。之前给出的ProgressBar是不会动的,利用这个方法就可以让它动起来(或者也可以直接调用RemoteView的set方法来直接更新?未试验)
如何自定义提示的声音和振动?
//自定义提示音 notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3"); //自定义振动方式 long[] vibrate = {0,100,200,300}; notification.vibrate = vibrate;
请注意:如果使用了DEFAULT_SOUND或DEFAULT_VIBRATE,则自定义的提示音和振动无效。
在类似于短消息的应用中如何提示数量?
使用Notification的number属性,默认为0,如果是1或更大的数字,则会在图标上覆盖显示这个数字。
notification.number=notificationNumber;
Flag的使用
notification有1个flag属性,除了DEFAULT_SOUND之外,还有几个很有用的属性。
FLAG_AUTO_CANCEL:自动清除Notification,前面的例子中有用到
FLAG_INSISTENT:提示音一直不停,直至用户响应(很吵吧!)
FLAG_ONGOING_EVENT:表示这是1个正在进行的任务,不可以清除,第2个例子中有用到
FLAG_NO_CLEAR:不可以清除
发表评论
-
Android Notification的使用
2012-10-20 19:28 9722Android 4.1 (Jelly Bean ... -
短信拦截
2012-09-25 20:40 2041最近写一个应用(A),需要拦截短信分析。一般是 ... -
Android Scroller简单用法
2012-08-01 16:35 65773Android里Scroller类是为了实现Vi ... -
Android 使用WebView.loadData中文乱码解决办法
2012-07-19 15:09 9547博主在使用WebView的loadData方法时发 ... -
Android HttpClient基本使用方法
2012-07-05 14:15 107833这里只介绍如何使用HttpClient发起GET或者POST请 ... -
Android XML定义颜色
2012-06-09 13:15 0在res/colors.xml中添加如下代码: 定义C ... -
Activity和Task的设计思路和方法
2012-03-29 20:20 1197Activity和 Task是 Android ... -
显示PopupWindow
2012-03-16 10:04 16636PopupWindow可 ... -
存储文件的ContentProvider
2012-03-08 23:37 9343基于SQLite的ContentProvider ... -
Android文件存储
2012-03-08 22:34 19360Internal Storage内部存储空 ... -
Android用软键盘将整个界面推上去
2012-03-04 17:11 35847在Android UI中 ... -
onInterceptTouchEvent和onTouchEvent调用时序
2012-02-11 23:42 1041onInterceptTouchEvent() ... -
使用ConnectivityManager监听网络状态变化
2011-12-24 11:16 29793mIntenFilter = new IntentFilte ... -
Window Manager
2012-03-22 23:51 1520Android的窗口机制基于WindowManager,可以通 ... -
CommonsWare Android Components
2011-12-17 16:10 1715CommonsWare Android Com ... -
Android中图片缩放
2011-12-17 00:09 1883下载的图片如果过大,可能导致内存溢出。需要做压 ... -
Android 使用Parcelable序列化对象
2011-12-16 23:43 36519Android序列化对象主要有两种方法,实现S ... -
PreferenceActivity
2011-12-12 22:54 880传送门:http://www.cnblogs.com/wser ... -
View.scrollBy()与View.scrollTo()的使用
2011-12-12 22:40 19536scrollTo()和scrollBy()都是V ... -
Android 新浪微博授权
2011-12-11 17:13 7468OAuth方式 通过网页方式授权 实现方法,三个步骤 1.使用 ...
相关推荐
Android 使用Notification自定义通知栏显示。自定义系统状态栏通知类NotificationExtend,也可以手动更新状态栏。依据此项目可以做成线程接受,或者广播接受自动更新。我博客网址: ...
使用android push notification service 实现即时通知
主要为大家详细介绍了Android使用Notification实现普通通知栏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要为大家详细介绍了Android使用Notification在状态栏上显示通知,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android实现Notification的通知栏常驻.zip
Notification是在你的应用常规界面之外展示的消息。当app让系统发送一个消息的时候,消息首先以图表的...Notification的界面元素在通知抽屉中的notification有两种显示方式,取决于你的android版本以及notification dr
Android自定义Notification,很实用的一个功能
Android push notification(即androidpn) 服务端源代码 非bin文件,而是源代码!
Android NOtification 使用Android NOtification 使用
主要利用了notification service 和receiver 实现了用户通知栏更新,失败了点击重新下载,下载好了点击自动安装,布局很丑,请根据自己项目的实际需求自行修改
android 利用notification 通知栏 实现动态下载.
今天看着《第一行代码》,准备实现一下书中所说的notification通知功能。非常简单的代码如下所示 @Override public void onClick(View v) { switch(v.getId()){ case R.id.send_notice: NotificationManager ...
Android-Notification-Example-master源码,是一个很不错的Android源码,有兴趣的伙伴们抽时间可以看一下把。
android 8.0 对 通知栏有了很大的改变,以往的方法写通知栏会报错,google新加了一个notificationChannel,而且必须添加,这里是Demo。
android notification完全解析Demo
Android push notification中C2DM,MQTT,XPMM的比较
android notification 通知 源码 例子