RemoteViews介绍

一、RemoteViews的应用


1、在通知栏上的应用

1)通过构造方法RemoteViews(当前包名,布局文件ID),新建一个RemoteViews对象。
2)通过一系列set方法,更新布局。
3)通过notification.contentView = remoteViews,完成通知栏布局的设定。

2、在桌面小部件上的应用

1)定义Widget的布局:在res/layout文件下定义
2)定义Widget的配置信息:在res/xml文件下定义,而且根元素为appwidget-provider
3)定义Widget的实现类:这个类需要继承AppWidgetProvider,
4)在Manifest.xml文件中声明Widget,根元素为receiver,其中:
meta-data要设置属性 android:name="android.appwidget.provider"     android:resource="@xml/widget_provider_info">,
intent-filter要设置属性 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />


AppWidgetProvider中的主要方法:
  • 1)onEnable:当窗口小部件第一次添加到桌面时会调用。
  • 2)onUpdate:小部件被添加时或者每次小部件更新时会调用。
  • 3)onDeleted:每删除一次桌面小部件jiuhuidiaoy。
  • 4)onDisabled:当最后一个桌面小部件被删除时会调用。
  • 5)onReceive:广播的内置方法。

3、PendingIntent介绍

1)概念
PendingIntent是在将来某个不确定时刻发生,一般用来给RemoteViews添加点击事件,而Intent是立刻发生。
2)支持的Intent:
  • -getActivity(Context context,int requestCode,Intent intent,int flags):跳转到Activity
  • -getService(Context context,int requestCode,Intent intent,int flags):跳转到Service
  • -getBroadcast(Context context,int requestCode,Intent intent,int flags):跳转到Broadcast
3)flags参数:
  • -FLAG_ONE_SHOT:PendingIntent只能被使用一次,然后就被自动取消
  • -FLAG_NO_CREATE:PendingIntent不会主动创建,如果当前PendingIntent不存在,获取PendingIntent失败
  • -FLAG_CANCEL_CURRENT:PendingIntent如果已经存在,那么它会被取消,然后被新来的替代。
  • -FLAG_UPDATE_CURRENT:PendingIntent如果已经存在,那么它们会被更新。
4)PendingIntent的匹配规则:
  • Intent相同,requestCode相同,两个PendingIntent就是匹配的。
  • Intent匹配规则:ComponentNme和intent-filter相同。

注意:
  • 1)如果manager.notify(id,notification)的id一直不变,那么不管PendingIntent是否匹配,新通知都会替换前面的通知。
  • 2)如果manager.notify(id,notification)的id每次都不同
  •  -当PendingIntent不匹配时,不论使用哪种标记位,这些通知都不会互相影响。
  •  -当PendingIntent匹配时,根据标记位产生不同影响。

二、RemoteViews的内部机制

 

1、RemoteViews支持的View类型

1)Layout:FrameLayout、LinearLayout、RelativeLayout、GridLayout
2)View;AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView等

2、内部机制

在本地进程中进行RemoteViews的操作,这些操作被转换成一个个Action对象,然后添加到Action集合中,这个集合附在RemoteViews中,当通过NotificationManager和AppWidgetManager来提交更新任务时,RemoteViews会通过Binder传递到远程进程SystemServer,在远程进程中,RemoteViews的apply方法进行更新操作,内部调用Action的apply方法进行实际的更新。

注意:
1)关于点击事件,RemoteViews中只支持发起PendingIntent,不支持onClickListener那种模式。
2)setOnClickPendingIntent用于给普通View设置单击事件,要给ListView和StackView中的item添加点击事件,则必须将setPendingIntentTemplate和setOnClickFillIntent组合使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值