Android 使用快捷图标app widget(一)

Android 应用快捷图标app widget(一)
应用程序窗口小部件App Widgets
       应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget provider来发布一个Widget。可以容纳其它App Widget的应用程序组件被称为App Widget宿主。下面的截屏显示了一个音乐App Widget。

       基础知识The Basics

       为了创建一个App Widget,你需要下面这些:
       AppWidgetProviderInfo 对象
       描述一个App Widget元数据,比如App Widget的布局,更新频率,以及AppWidgetProvider 类。这应该在XML里定义。
       AppWidgetProvider 类的实现
       定义基本方法以允许你编程来和App Widget连接,这基于广播事件。通过它,当这个App Widget被更新,启用,禁用和删除的时候,你都将接收到广播通知。
       视图布局
       为这个App Widget定义初始布局,在XML中。
       另外,你可以实现一个App Widget配置活动。这是一个可选的活动Activity,当用户添加App Widget时加载并允许他在创建时来修改App Widget的设置。

       下面的章节描述了如何建立这些组件:

       在清单中声明一个应用小部件
       首先,在应用程序AndroidManifest.xml文件中声明AppWidgetProvider 类,比如:

java代码:
<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

< src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" type="text/javascript">

< src="" type="text/javascript">

/>

</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:resource – 指定AppWidgetProviderInfo 资源路径。
        增加AppWidgetProviderInfo元数据
        AppWidgetProviderInfo定义一个App Widget的基本特性,比如最小布局尺寸,初始布局资源,刷新频率,以及创建时加载的一个配置活动。使用单独的一个<appwidget-provider>元素在XML资源里定义

        AppWidgetProviderInfo 对象并保存到项目的res/xml/目录下。

java代码:
<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> .
       下面是<appwidget-provider>属性的总结:
       ·minWidth 和minHeight 属性的值指定了这个App Widget布局需要的最小区域。
       缺省的App Widgets所在窗口的桌面位置基于有确切高度和宽度的单元网格。如果App Widget的最小长宽和这些网格单元的尺寸不匹配,那么这个App Widget将收缩到最接近的单元尺寸。(参见App Widget Design Guidelines 以获取更多关于桌面单元尺寸的信息)

       因为桌面布局方向(由此,单元的尺寸)可以变化,按照拇指规则,你应该假设最坏情况单元尺寸是74像素高和宽。不过,你必须从最后的尺寸中减去2以把像素计算过程中产生的任何的整数舍入误差考虑在内。要找到像素密度无关的最小宽度和高度,使用这个公式:(number of cells * 74) - 2遵循这个公式,你应该使用72dp为每一个单元高度,294dp为四个单元宽度。

       ·updatePerdiodMillis 属性定义了App Widget框架调用onUpdate()方法来从AppWidgetProvider请求一次更新的频度。实际更新时间并不那么精确,而且我们建议更新频率越低越好-也许每小时不超过一次以节省电源。你也许还会允许用户在配置中调整这个频率-一些人可能想每15分钟一次股票报价,或者一天只要四次。

        ·initialLayout属性指向定义App Widget布局的资源。
        ·configure属性定义了Activity ,当用户添加App Widget时启动,以为他或她配置App Widget特性。这是可选的。
         参见AppWidgetProviderInfo 类以获取更多可以被<appwidget-provider>元素接受的属性信息。

       创建App Widget布局
       你必须在XML中为你的App Widget定义一个初始布局并保存到项目的res/layout/ 目录下。你可以使用如下所列的视图对象来设计你的App Widget,但是在此之前,请先阅读并理解App Widget Design Guidelines.
       如果你熟悉在XML中声明布局,那么创建这个App Widget布局是很简单的。但是,你必须意识到那个App Widget布局是基于RemoteViews, 这并不支持所有类型的布局或视图小部件。

       一个RemoteViews对象(以及,相应的,一个App Widget)可以支持下面这个布局类:以及下面的小部件类:
        ·FrameLayout
        ·LinearLayout
        ·RelativeLayout
        ·AnalogClock
        ·Button
        ·Chronometer
        ·ImageButton
        ·ImageView
        ·ProgressBar
        ·TextView 不支持这些类的派生。