Android API Guides---App Widgets
应用小工具应用Widget是可以在其他应用程序(如主屏幕)嵌入并接受定期更新的微型应用程序的意见。这些观点在用户界面被称为小工具,你可以发布一个与应用的Widget提供商。即能持有其他应用程序的窗口小部件的应用程序组件被称为应用程序的Widget主机。下面的截图显示音乐应用的Widget。
本文介绍了如何使用应用程序的Widget提供者发布应用的Widget。为了创建自己的AppWidgetHost托管应用小部件的讨论,请参阅应用的Widget主机。
设计的Widget
有关如何设计你的应用程序窗口小部件的信息,请阅读窗口小部件的设计指南。
基础
要创建一个应用程序窗口小部件,您需要满足以下条件:
AppWidgetProviderInfo对象
描述元数据为应用的Widget,如在App Widget的布局,更新频率,以及AppWidgetProvider类。这应当以XML来定义。
AppWidgetProvider类的实现
定义的基本方法,让您以编程与应用程序widget界面,基于广播的事件。通过它,当应用程序的Widget被更新,启用,禁用和删除您将收到广播。
视图布局
定义了应用程序插件的初始布局,在XML中定义。
此外,还可以实现一个应用的Widget配置活动。这是一个可选的活动,当用户将您的Widget应用程序,并允许他或她在修改创作时应用小工具设置,启动。
以下各节描述了如何设置这些组件。
在清单中声明一个应用程序窗口小部件
首先,声明在应用程序的Andr??oidManifest.xml文件中的AppWidgetProvider类。例如:
在<接收器>元素需要在android:name属性,它指定了应用程序的Widget使用的AppWidgetProvider。
在<意向filter>元素必须包含了Android的元素:name属性。该属性指定AppWidgetProvider接受ACTION_APPWIDGET_UPDATE播出。这是你必须显式声明的唯一播出。该AppWidgetManager自动发送所有其他App的Widget广播到AppWidgetProvider是必要的。
在<元数据>元素指定AppWidgetProviderInfo资源,需要以下属性:
机器人:名字 - 指定的元数据名称。使用android.appwidget.provider标识数据作为AppWidgetProviderInfo描述符。
机器人:资源 - 指定AppWidgetProviderInfo资源位置。
添加AppWidgetProviderInfo元
该AppWidgetProviderInfo一个App Widget时,基本素质定义,如最小尺寸的布局,其初始布局资源,多久更新应用程序窗口小部件,和(可选)配置活动在创建时推出。定义AppWidgetProviderInfo对象使用一个元素的XML资源,并将其保存在项目的RES / XML /文件夹。
例如:
这里的的摘要属性:
对了minWidth和属性了minHeight的值指定应用的Widget消耗默认的最小空间量。默认主页屏幕位置应用小部件在其窗口的基础上具有一个定义的高度和宽度的细胞的网格。如果一个App Widget的最小宽度或高度值不匹配的单元格的尺寸,然后应用程序窗口小部件的尺寸四舍五入到最接近的单元尺寸。
查看应用程序的Widget设计准则有关调整你的App小工具的更多信息。
注:为了使您的应用程序窗口小部件可跨设备,你的应用程序widget的最小尺寸不应大于4×4细胞。
该minResizeWidth和minResizeHeight属性指定应用Widget的绝对最小尺寸。这些值应指定大小低于该应用的Widget会难以辨认或不可用。使用这些属性允许用户小窗口调整大小的尺寸可能比由了minWidth和了minHeight属性定义的默认插件尺寸。在推出的Andr??oid 3.1。
查看应用程序的Widget设计准则有关调整你的App小工具的更多信息。
该updatePeriodMillis属性定义多久的Widget应用程序框架应通过调用的onUpdate()回调方法要求从AppWidgetProvider更新。实际更新不保证准确地出现在时间这个值,我们则建议尽可能少,也许不超过一小时一次,以节省电池。您可能还允许用户调整的频率配置,有些人可能希望有一个股票代码,以每15分钟,或者也许只有一天四次更新。
注意:如果该装置处于睡眠状态时,它是时间的更新(如由updatePeriodMillis定义),则该设备将依次执行更新醒来。如果不更新超过每小时一次,这大概不会引起对电池寿命显著问题。但是,如果您需要更新更频繁和/或你并不需要更新,而设备是睡着了,那么你就可以执行,而不是基于不会唤醒设备的报警的更新。要做到这一点,设置闹钟与你的AppWidgetProvider接收,使用AlarmManager的意图。设置报警类型要么ELAPSED_REALTIME或RTC,其中,当该设备是醒着将仅提供警报。然后设置updatePeriodMillis为零(“0”)。
该initialLayout属性点来定义应用程序的Widget布局布局资源。
该配置属性定义了活动,当用户添加应用程序窗口小部件,为了推出他或她来配置应用程序窗口小部件的属性。这是可选的(阅读下面创建一个应用程序窗口小部件配置活动)。
该previewImage属性指定的应用程序部件将是什么它的配置后的预览,选择应用程序窗口小部件时,用户看到。如果没有提供,用户,而不是看到你的应用程序的启动图标。该字段对应于Android的:在AndroidManifest.xml文件的<接收>元素previewImage属性。对于使用previewImage的更多讨论,请参阅设置预览图像。介绍了Android 3.0的。
该autoAdvanceViewId属性指定的应用程序部件子视图应该是自动先进的部件的主机的视图ID。介绍了Android 3.0的。
该resizeMode属性指定由一个widget可以调整的规则。您可以使用此属性使主屏幕小部件可调整大小,水平,垂直或两个轴。用户触摸按住某个小部件,以显示其缩放柄,然后拖动水平和/或垂直手柄来改变布局网格的大小。对于resizeMode属性的值包括“水平”,“垂直”和“无”。为调整大小水平和垂直声明一个小部件,提供值“横|纵”。在推出的Andr??oid 3.1。
该minResizeHeight属性指定该控件可以调整的最低高度(DPS)。此字段没有任何影响,如果超过了minHeight大于或没有启用垂直大小调整(见resizeMode)。介绍了Android 4.0的。
该minResizeWidth属性指定了小部件可以调整大小的最小宽度(DPS)。此字段没有任何影响,如果超过了minWidth大于或没??有启用水平调整大小(见resizeMode)。介绍了Android 4.0的。
该widgetCategory属性声明是否你的应用程序的Widget可以在主屏幕(home_screen),锁屏(键盘保护),或者两者上显示。只有Android的版本比5.0的支持锁屏小部件低。对于Android 5.0以上版本,只有home_screen是有效的。
见AppWidgetProviderInfo类由元素接受属性的更多信息。
创建应用程序窗口小部件布局
你必须在XML定义一个初始布局为您的应用程序窗口小部件,并将其保存在项目的RES /布局/目录下。您可以使用下面列出的视图对象设计的App窗口小部件,但你开始设计的Widget应用程序之前,请阅读并理解应用的Widget设计指南。
创建应用程序窗口小部件的布局很简单,如果你熟悉的布局。但是,你必须要知道,应用程序的Widget布局是基于RemoteViews,这并不支持每一种布局或视图小部件。
一个RemoteViews对象(,因此,应用程序的Widget),可以支持以下布局类:
的FrameLayout
的LinearLayout
的RelativeLayout
网格布局
而下面的小部件类:
AnalogClock
按键
时计
的ImageButton
ImageView的
进度条
TextView中
ViewFlipper
列表显示
网格视图
StackView
AdapterViewFlipper
不支持这些类的后裔。
RemoteViews还支持ViewStub,这是一种无形的,零大小的视图,您可以使用在运行时懒洋洋地膨胀布局资源。
添加边距应用小工具
窗口小部件,一般不应延伸到屏幕边缘,不应该在视觉上与其他小部件齐平,所以你应该在你的周围小窗口框各方增加利润。
由于Android 4.0,应用小部件会自动给出的小窗口框和应用程序窗口小部件的边框为用户提供用户的主屏幕上的其他部件和图标更好地协调之间的填充。要充分利用这一强烈推荐行为的优势,设置应用程序的targetSdkVersion至14或更大。
这很容易写出具有适用于早期版本的平台,自定义边距单一的布局,并有Android 4.0及更高没有多余的边距:
设置应用程序的targetSdkVersion至14或更大。
创建一个布局,如下面的人,引用其利润率方面的资源:
<frameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/widget_margin">创建两个维度的资源,一个在RES/价值/提供预Android 4.0的定制空间,和一个在res/值-V14/提供Android 4.0的小部件没有微胖:… </frameLayout>
RES/价值/ dimens.xml: