Android 创建桌面组件Widget——构建应用微件(二)
Android 创建桌面组件Widget——构建应用微件(一)
Android 创建桌面组件Widget——构建应用微件(二)
效果图:
创建一个可以改变大小的widget,包含一个Button和一个TextView,点击按钮跳转到指定的Activity。
概览
微件是自定义主屏幕的一个重要方面。您可以将微件想象成“一目了然”的视图,它们让最重要的应用数据和功能一览无余,从用户的主屏幕即可进行访问。用户可以在其主屏幕面板间移动微件,如果系统支持,用户还可以调整微件的大小,按照他们的偏好量身定制微件中的信息量。
使用 AppWidgetProvider 类
AppWidgetProvider
类扩展了BroadcastReceiver
作为一个辅助类来处理应用微件广播。AppWidgetProvider
仅接收与应用微件有关的事件广播,例如当更新、删除、启用和停用应用微件时发出的广播。当发生这些广播事件时,AppWidgetProvider
会接收以下方法调用:
onUpdate()
调用此方法可以按AppWidgetProviderInfo
中的updatePeriodMillis
属性定义的时间间隔来更新应用微件。当用户添加应用微件时也会调用此方法,所以它应执行基本设置,如定义视图的事件处理脚本以及根据需要启动临时的Service
。不过,如果您已声明配置Activity
,则当用户添加应用微件时不会调用此方法,但会调用它来执行后续更新。由配置Activity
负责在配置完成后执行首次更新。onAppWidgetOptionsChanged()
当首次放置微件时以及每当调整微件的大小时,会调用此方法。您可以使用此回调来根据微件的大小范围显示或隐藏内容。您可以通过调用getAppWidgetOptions()
来获取大小范围,该方法会返回包含以下各项的Bundle
:OPTION_APPWIDGET_MIN_WIDTH
: 包含微件实例的当前宽度的下限(以 dp 为单位)。OPTION_APPWIDGET_MIN_HEIGHT
: 包含微件实例的当前高度的下限(以 dp 为单位)OPTION_APPWIDGET_MAX_WIDTH
: 包含微件实例的当前宽度的上限(以 dp 为单位)OPTION_APPWIDGET_MAX_HEIGHT
: 包含微件实例的当前高度的上限(以 dp 为单位)。- 此回调是在 API 级别 16 (Android 4.1) 中引入的。如果您实现此回调,请确保您的应用不依赖于它,因为在旧款设备上不会调用它。
onDeleted(Context, int[])
每次从应用微件托管应用中删除应用微件时,都会调用此方法。onEnabled(Context)
首次创建应用微件的实例时,会调用此方法。例如,如果用户添加应用微件的两个实例,只有首次添加时会调用此方法。如果您需要打开一个新的数据库或执行只需要对所有应用微件实例执行一次的其他设置,则此方法非常合适。onDisabled(Context)
从应用微件托管应用中删除了应用微件的最后一个实例时,会调用此方法。您应使用此方法来清理在onEnabled(Context)
中完成的所有工作,如删除临时数据库。- ``
针对每个广播调用此方法,并且是在上述各个回调方法之前调用。您通常不需要实现此方法,因为默认的AppWidgetProvider
实现会过滤所有应用微件广播并视情况调用上述方法。
最重要的 AppWidgetProvider
回调是 onUpdate()
,因为向托管应用添加每个应用微件时都会调用它(除非您使用配置 Activity
)。如果应用微件接受任何用户交互事件,则您需要在此回调中注册事件处理脚本。如果应用微件未创建临时文件或数据库,或者未执行其他需要清理的工作,则 onUpdate()
可能是您需要定义的唯一一个回调方法。例如,如果您希望应用微件具有一个在用户点击时会启动 Activity
的按钮,则可以使用以下 AppWidgetProvider
实现:
public class ExampleAppWidgetProvider extends AppWidgetProvider {
public void