桌面窗口小部件添加List
@Author GQ 2018年07月08日
练习使用添加窗口小部件功能
长按桌面-添加窗口小部件-找到Flag-拖动到屏幕
效果图
流程
- 创建
MyAppWidgetProvider
重写onUpdate()
方法 - 使用
RemoteView
承载小部件的布局 appWidgetManager.updateAppWidget(appWidgetId, mRemoteViews)
方法更新小部件
AppWidgetProvider重写方法
onAppWidgetOptionsChanged
当widget被初次添加或者当widget 的大小被改变时,被调用
onEnabled
第一个widget被创建时调用
onDeleted
widget被删除时调用
onDisabled
最后一个widget被删除时调用
- 重要
onReceive
广播接收处理事件,我们的主要逻辑就需要在这里处理了
创建窗口小部件
- 继承自
AppWidgetProvider
- 声明Receiver
<!-- 声明widget对应的AppWidgetProvider -->
<receiver android:name=".MyAppWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="CHANGE_POSITION" /> 点击item刷新
<action android:name="CHANGE_DATA" /> 刷新list列表
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" /> 声明小部件布局
</receiver>
声明小部件
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_layout"
android:minHeight="150dp"
android:minWidth="326dp"
android:previewImage="@mipmap/ic_flag"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen|keyguard">
<!--
android:minWidth : 最小宽度
android:minHeight : 最小高度
android:updatePeriodMillis : 更新widget的时间间隔(ms),"86400000"为1个小时
android:previewImage : 添加小部件时的预览图片
android:initialLayout : 加载到桌面时对应的布局文件
android:resizeMode : widget可以被拉伸的方向。horizontal表示可以水平拉伸,vertical表示可以竖直拉伸
android:widgetCategory : widget可以被显示的位置。home_screen表示可以将widget添加到桌面,keyguard表示widget可以被添加到锁屏界面。
android:initialKeyguardLayout : 加载到锁屏界面时对应的布局文件
-->
</appwidget-provider>
在小部件使用List
- 创建
ListViewService
继承RemoteViewsService
class ListViewService : RemoteViewsService() {
override fun onGetViewFactory(intent: Intent?): RemoteViewsFactory {
return ListRemoteViewsFactory(this.applicationContext, intent)
}
}
Manifest
声明Service
<service
android:name=".ListViewService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_REMOTEVIEWS" />
ListRemoteViewsFactory
- 继承自
RemoteViewsService.RemoteViewsFactory
- 主要复写方法 :
onCreate()
onDataSetChanged()
getCount()
getViewAt()
onDestroy()
有点类似于Adapter的内容,具体内容可以查看demo