AppWidget(桌面小部件)
Posted xhBruce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(桌面小部件)的主要内容,如果未能解决你的问题,请参考以下文章
uniapp 窗口小工具桌面小部件微件 Ba-AppWidget