AppWidget(桌面小部件)

Posted xhBruce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
待续~~

以上是关于AppWidget(桌面小部件)的主要内容,如果未能解决你的问题,请参考以下文章

AppWidget(桌面小部件)

AppWidget(桌面小部件)

Android桌面小部件AppWidget开发

uniapp 窗口小工具桌面小部件微件 Ba-AppWidget

uniapp 窗口小工具桌面小部件微件 Ba-AppWidget

桌面小部件AppWidgetProvider简单分析