窗口小部件(App Widget)、 快捷方式和实时文件夹充分体现了新一代移动操作系统的特征.
一
App Widget 窗口小部件 ,也可直接称为 Widget, 是一种可以放在Android 桌面上的应用程序, 这一功能是从SDK 1.5开始引入的.
先看一个示意图:
每一个Widget 实际上就是一个 BroadcastReceiver, 它们通过 XML 文件来描述 Widget 的细节. AppWidget 框架通过Broadcast intents 和Widget 通信
Widget 更新组件必须使用 RemoteViews 作为代理来更新, 具体步骤如下:
(1) 建立一个 XML 布局文件,在该布局文件中定义Widget 中显示的组件,要注意,Widget 并不是支持所有的 Android 组件。只能使用以下组件类:
1) 用于布局的组件类
FrameLayout ,LinearLayout, RelativeLayout,
2) 可视组件类 10个
AnalogClock(世界时间,即不同时区时钟), Button, Chronometer(精密计时器, 秒表), ImageButton, ImageView, ProgressBar, TextView
Widget 之所以不能使用其他的组件类, 是因为Widget 上的组件是通过RemoteVeiw 进行更新的.
(2) 创建Widget 描述文件. 该文件是 XML 格式,必须放在res\xml 目录中。基本格式如下:
<appwidget-provider xmlns:android=http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="146dp"
android:updatePeriodMillis="3600000"
android:initialLayout="@layout/main" />
其中minWidth ,minHeight 表示Widget 的最小宽度和最小高度, updatePeriodMillis 表示Widget 更新的时间间隔(ms),也就是每隔指定时间就会调用onUpdate方法更新Widget,如果为0, 表示不更新. initialLayout 表示Widget 的XML布局文件.也就是第一步建立的布局文件。
这里介绍一下Widget 的摆放规则: Android 将桌面分成若干个单元格,每一个单元格的尺寸可以认为是 74 像素(pixels) , 如果手机屏幕分辨率为 320 X480,屏幕会被分成16个单元格, Widget 的大小只能是这些格尺寸的整数倍.
(3) 建立Widget 类,这个类必须继承AppWidgetProvider, AppWidgetProvider 是BroadcastReceiver 的子类, 在AppWidgetProvider 类实现几个方法,其中onUpdate 是最常用的方法
(4) 最后一步,在AndroidManifest.xml 文件中定义一个receiver ,以便系统和Widget 进行通信.例如:
<receiver android:name=".ZgctWidget">
<meta-data android:name="android.appwidget.provier"
android:resource="@xml/appwidget_provider" />
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
</receiver>
具体代码请参见 ch15_digitclock 数字时钟 工程 和ch15_digitclock_activity可以选择风格的数字时钟 工程, 可以选择风格数字时钟示意图如下:
二 快捷方式
添加快捷方式分为向快捷方式列表中添加,直接将快捷方式放在桌面上。
(1) 要将应用程序添加到快捷方式列表中,android 系统自动完成了,也就是说,只要程序安装正确,都会在快捷方式列表中看到,在这里开发者提出来,主要是熟悉流程代码,用户要自己实现从快捷方式列表到桌面这个过程,必须在AndroidManifest.xml 作如下配置
<activity android:name=".AddCompassShortcut" android:label="电子罗盘"
android:icon="@drawable/compass_shortcut">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
</intent-filter>
</activity>
具体代码请参见 ch15_addshortcut工程
(2) 要实现将应用程序直接添加到桌面, 可以通过广播的方式实现
例如,添加电子罗盘快捷方式到桌面上代码如下:
....................................................................
特别注意, 与上一种情况不同,直接添加到桌面 需要声明找开安装权限: <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
具体代码请参见 ch15_installshortcut工程
三 实时文件夹 (LiveFolder)
与快捷方式不同,实时文件夹不是用来启动程序的,用来 访问其他应用程序中的数据,它通过ContentProvider 来获得其他应用程序中的数据.
要增加实时文件夹,需要配置建立实时文件夹的Activity 的代码:
<activity android:name=".AddLiveFolder" android:label="电话本" android:icon="@drawable/phone">
<intent-filter>
<action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
</intent-filter>
</activity>
这里只要将AddLiveFolder 添加到任何的 Android 应用程序中,并启动程序,系统会自动将这个程序添加到实时文件夹列表中。
具体代码请参见 ch15_livefolder 工程