桌面窗口小部件添加List

桌面窗口小部件添加List

@Author GQ 2018年07月08日

练习使用添加窗口小部件功能

长按桌面-添加窗口小部件-找到Flag-拖动到屏幕

效果图

这里写图片描述
这里写图片描述

流程

  1. 创建 MyAppWidgetProvider 重写 onUpdate() 方法
  2. 使用 RemoteView 承载小部件的布局
  3. 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

查看Demo

猜你喜欢

转载自blog.csdn.net/baidu_25797177/article/details/80965672