• AppWidget(桌面小部件)


    AppWidget(桌面小部件)

    AppWidget概览

    1. AppWidget限制

    1.1 手势

    由于AppWidget位于主屏幕上,因此它们必须与在主屏幕上建立的导航共存。与全屏应用相比,这样会使AppWidget只能支持有限的手势。例如,虽然应用可能支持可让用户在屏幕之间横向导航的视图翻页工具,但在主屏幕上已采用该手势,其作用是在主屏幕面板之间导航。


    只能对微件使用以下手势:

    • 轻触
    • 纵向滑动
      在这里插入图片描述

    1.2 支持的布局

    AppWidget布局基于 RemoteViews,并不是每种布局或视图微件都受其支持。
    因而AppWidget可以支持以下布局类:

    • FrameLayout frameworks/base/core/java/android/widget/FrameLayout.java
    • LinearLayout frameworks/base/core/java/android/widget/LinearLayout.java
    • RelativeLayout frameworks/base/core/java/android/widget/RelativeLayout.java
    • GridLayout frameworks/base/core/java/android/widget/GridLayout.java

    以及以下Widget类:

    • AnalogClock frameworks/base/core/java/android/widget/AnalogClock.java
    • Button frameworks/base/core/java/android/widget/Button.java
    • Chronometer frameworks/base/core/java/android/widget/Chronometer.java
    • ImageButton frameworks/base/core/java/android/widget/ImageButton.java
    • ImageView frameworks/base/core/java/android/widget/ImageView.java
    • ProgressBar frameworks/base/core/java/android/widget/ProgressBar.java
    • TextView frameworks/base/core/java/android/widget/TextView.java
    • ViewFlipper frameworks/base/core/java/android/widget/ViewFlipper.java
    • ListView frameworks/base/core/java/android/widget/ListView.java
    • GridView frameworks/base/core/java/android/widget/GridView.java
    • StackView frameworks/base/core/java/android/widget/StackView.java
    • AdapterViewFlipper frameworks/base/core/java/android/widget/AdapterViewFlipper.java


      不支持这些类的后代。
      RemoteViews 还支持 ViewStub,它是一个大小为零的不可见视图,您可以使用它在运行时以懒散的方式扩充布局资源。

    2. 构建AppWidget

    查看Android官网 构建应用微件
    在这里插入图片描述 在这里插入图片描述

    frameworks/base/core/java/android/appwidget
    frameworks/base/core/java/android/widget/RemoteViews.java

    Androidstudio中创建 Widget->App Widget
    在这里插入图片描述 在这里插入图片描述
    使用 AppWidgetProvider 类
    接收应用微件广播 Intent

    2.1 使用包含集合的AppWidget

    ListView 一种在垂直滚动列表中显示项目的视图。有关示例,请查看 Gmail 应用微件。
    GridView 一种在二维滚动网格中显示项目的视图。有关示例,请查看"书签"应用微件。
    StackView 一种堆叠式卡片视图(有点像名片盒),用户可以分别向上/向下翻动前面的卡片来查看上一张/下一张卡片。示例包括 YouTube 和"图书"应用微件。
    AdapterViewFlipper 一种由适配器支持的简单 ViewAnimator,可以在两个或更多视图之间呈现动画效果。一次只显示一个子级。

    如上所述,这些集合视图显示由远程数据支持的集合。这意味着,它们使用 Adapter 将其界面绑定到其数据。Adapter 将一组数据中的各个项目绑定到各个 View 对象。由于这些集合视图由适配器支持,因此 Android 框架必须包含额外的架构来支持它们在应用微件中的使用。在应用微件的上下文中,Adapter 被 RemoteViewsFactory 取代,后者只是 Adapter 接口的瘦封装容器。请求集合中的特定项目时,RemoteViewsFactory 会为集合创建相应项目并将其作为 RemoteViews 对象返回。要在应用微件中添加集合视图,您必须实现 RemoteViewsService 和 RemoteViewsFactory

    RemoteViewsService 是允许远程适配器请求 RemoteViews 对象的服务。RemoteViewsFactory 是集合视图(ListView、GridView 等等)与该视图的底层数据之间的适配器的接口(查看 StackWidget 示例)。

    要使包含集合的应用微件能够绑定到 RemoteViewsService,您还必须在清单文件中使用 BIND_REMOTEVIEWS 权限来声明该服务。这样可防止其他应用自由访问您的应用微件的数据。

    对 AppWidget 布局 XML 文件的主要要求是它必须包含某个集合视图:ListView、GridView、StackView 或 AdapterViewFlipper。下面是 StackWidget 示例的 widget_layout.xml:
    在这里插入图片描述

    除了整个应用微件的布局文件之外,您必须再创建一个布局文件,用来定义集合中每个项目的布局(例如,一套图书中每本图书的布局)。StackWidget 示例只有一个布局文件 widget_item.xml,因为所有项目使用同一布局。

    2.2 包含集合的AppWidget的 AppWidgetProvider 类

    2.3 RemoteViewsService 类

    2.4 RemoteViewsFactory 接口

    2.5 向各个项目添加行为

    2.6 使集合数据保持最新

    在这里插入图片描述

    3. AppWidget 示例

    AppWidgetDemo
    待续~~

  • 相关阅读:
    大模型/LLM的涌现能力
    java项目之小说阅读网站(ssm源码+文档)
    前端最强面试宝典 - JS 篇之数据类型
    R语言结课及Matlab开始
    Linux查看日志常用命令
    vscode快捷键使用总结
    5G核心网网元服务异常检测
    【大数据 minio】10分钟了解大数据存储的方案minio
    国内crm解决方案的主要提供商有哪些?对比7家
    LocalDateTime获取时间类(当前时间)
  • 原文地址:https://blog.csdn.net/qq_23452385/article/details/126691836