[Android] App Widgets-窗口小部件-partI

android技术开发 发布于 2013/07/30 10:54
阅读 427
收藏 0
应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget Provider来发布一个Widget。可以容纳其它App Widget的应用程序组件被称为App Widget宿主程序。下面的截屏显示了一个音乐App Widget。
本篇文章描述了如何通过使用App Widget Provider发布一个App Widget。
基础知识 为了创建一个App Widget,你需要使用下面这些:
AppWidgetProviderInfo 对象
描述一个App Widget元数据,比如App Widget的布局,更新频率,以及AppWidgetProvider 类。这个应该在XML里定义。
AppWidgetProvider 类的实现
定义基本方法以允许你通过编程来和App Widget通信,这基于广播事件。通过它,当App Widget被更新、可用、禁用和删除的时候,都将接收到广播通知。
视图布局
在XML中定义App Widget初始布局。
另外,你可以实现App Widget配置Activity 。这是一个可选的Activity,当用户添加App Widget时加载它并允许用户修改App Widget的设置。
下面的内容描述了如何建立这些组件: 
在Manifest中声明一个应用小部件首先,在应用程序AndroidManifest.xml文件中声明AppWidgetProvider 类,比如:
view plain


<receiver android:name="ExampleAppWidgetProvider" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/example_appwidget_info" />
</receiver>




<receiver>元素需要android:name属性,指定了App Widget使用的AppWidgetProvider 。
<intent-filter>元素必须包括一个含有android:name属性的<action>元素。该元素指定AppWidgetProvider接受ACTION_APPWIDGET_UPDATE 广播。这是唯一你必须显式声明的广播。当需要的时候,必要时AppWidgetManager会自动发送所有其它App Widget广播给AppWidgetProvider。
<meta-data> 元素指定了AppWidgetProviderInfo 资源并需要以下属性:
android:name–指定元数据名称,使用android.appwidget.provider 来 确定AppWidgetProviderInfo描述的数据。
android:resource–指定AppWidgetProviderInfo 资源路径。
添加AppWidgetProviderInfo元数据 AppWidgetProviderInfo定义一个App Widget的基本特性,比如最小布局尺寸,初始布局资源,刷新频率,以及创建时加载的一个配置Activity(可选的)。使用单独的一个<appwidget-provider>元素在XML资源里定义AppWidgetProviderInfo 对象并保存到项目的res/xml/目录下。
比如: 
view plain


<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure" >
</appwidget-provider>
<span style="font-family:Arial;BACKGROUND-COLOR: #ffffff"></span>




下面是<appwidget-provider>属性的总结: 
minWidth 和minHeight 属性的值指定了App Widget布局需要的最小区域。


缺省的App Widgets所在窗口的桌面位置基于有确定高度和宽度的单元网格中。如果App Widget的最小长度或宽度和这些网格单元的尺寸不匹配,那么这个App Widget将上舍入(上舍入即取比该值大的最接近的整数——译者注)到最接近的单元尺寸。
一般说来桌面布局方向可以变化(由此单元的尺寸也会变化),你应该假设最坏情况即单元尺寸高和宽是74像素。不过,你必须从最终的尺寸中减去2以把像素计算过程中产生的任何的整数舍入误差考虑在内。要找到像素密度无关的最小宽度和高度,使用这个公式:
(number of cells * 74) - 2
依据这个公式,你应该使用72dp作为高度,294dp作为宽度。
updatePerdiodMillis 属性定义了App Widget框架调用onUpdate()方法来从AppWidgetProvider请求一次更新的频度。实际更新时间并不那么精确,而且我们建议更新频率越低越好——最好每小时不超过一次以节省电源。你也许还会允许用户在配置中调整这个频率——一些人可能想每15分钟一次股票报价,或者一天只要四次。
注意:当到个更新的时间时,如果设备处于休眠状态,则设备将会被唤醒来执行更新操作。如果更新频率每小时不超过一次,这可能对电池的寿命不会产生值得注意的问题。但是,如果更新的很频繁,或者当设备处于休眠状态时不更新,那么你最好使用一个alarm来代替执行更新操作,这样不会唤醒设备。这种方式可以通过使用AlarmManager类实现。设置alarm的类型为 ELAPSED_REALTIME或者RTC,这两种类型只有在设备处于唤醒状态时才会传递alarm,同时设置updatePeriodMillis 为0.
initialLayout属性指向定义App Widget布局的资源。
configure属性定义了当用户添加App Widget时启动的Activity,以为他/她配置App Widget特性。这是可选的
参见AppWidgetProviderInfo 类以获取更多可以被<appwidget-provider>元素接受的属性信息。

来源: 麦可网论坛
加载中
返回顶部
顶部