2024年3月27日发(作者:)

android4.0中实现AppWidget集合

1.准备appwidget的初始布局和预览视图等资源

AppWidget集合应用时,需配置两种布局文件:一个用于集合view布局显示,一个

用于集合view上条目的的布局显示

注意:要设置empty views,以便匹配集合view的空状态,且该View必须是集合

View(一般可为ListView、GridView、StackView或AdapterViewFlipper)的同级View

2.在res/xml中创建AppWidgetProviderInfo文件

根标签为appwiget-provider,其属性要包括initialLayout、previewImage、

autoAdvanceViewId 等,具体可参考后面的例子

3.创建AppWidgetProvider的实现子类,并在清单文件里面注册引用的元数据和监听的

广播action

清单文件中,需给该子类配置如下信息:

action android:name="GET_UPDATE"

元数据:android:name="er"

代码中,onUpdate方法中完成Widget布局到桌面上时的刷新;onReceive方法中

完成接收到特定广播后的Widget刷新

(另外,如果配置了Configure Activity还需要注册

action,"GET_CONFIGURE")

4.因为是集合Widget,需要创建一个继承了RemoteViewsService的Service子类,

并在清单文件中注册权限,阻止其它程序自由访问Widget中的数据

android:permission="_REMOTEVIEWS"

代码中通过onGetViewFactory方法返回一个RemoteViewsFactory的实现类,该

实现类中的onCreate()用来创建及初始化设置Widget的单个item; getViewAt()方法

用来同步数据,进行耗时的更新操作,并返回RemoteView对象。

getViewAt方法中可完成:

<1>将显示独立Widget条目的view item数据以fill-in intent方式填充到集合

Widget的View集合中

View集合中Chilid view不允许使用setOnClickPendingIntent的点击事件动态更新,

只能通过setOnClickFillInIntent来实现,

即先设置好集合view的pending intent template点击事件模版,然后,将独立的

chilid view条目的the fill-in Intent意图事件填充进来。

<2>进行耗时的处理图片和获取网络数据操作,并同步刷新Widget的显示内容。