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的显示内容。


发布评论