资源预览内容
第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
第9页 / 共32页
第10页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
桌面组件之Widget讲解人:杨培栋 时间:2010-06-24常见桌面组件介绍桌面组件:第一次启动android模拟器时,很多的图标如:Google搜索栏、联系人、 浏览器等都是桌面组件。它们和pc机上的桌面快捷方式很像,但它们不全是 快捷方式,还包括实时文件夹(LiveFolder)和桌面插件(appwidget)。快捷方式Android快捷方式和pc上快捷方式一样,用以启动对应应用。 实时文件夹(Live Folder)实时文件夹非常类似快捷方式,但是它提供拉应用的实时更新功能。如:联系人信息实时文件夹、电子邮件实时文件夹。 AppwidgetAppwidget主要应用在web2.0服务或互联网内容前端。自android1.5版本中加 入Appwidget开发框架后无疑使Appwidget开发成为此版本开发的一个重要的 亮点。第一节 快捷方式1.1启用方法:添加快捷方式的方法是非常简单的。在android桌面空白处长按桌面或 “Menu” 上长按弹出桌面组件选项( Menu先选择Add) 。选择“Shortcuts”,进入对应选项 可添加快捷方式。1.2开发流程:a 在Activity注册时添加一个Action为android.intent.action.CREATE_SHORTCUT的 IntentFilterb 为快捷方式设置名称、图标、事件等属性。 Intent.EXTRA_SHORTCUT_NAME对 应快捷方式名字; Intent.EXTRA_SHORTCUT_ICON_RESOURCE对应快捷方式图标;Intent.EXTRA_SHORTCUT_INTENT为快捷方式事件。注意:Android提供Intent.ShortcutIconResource.fromContext专门为快捷方式提供图标。 第二节 实时文件夹(Live Folder)2.1 启用方法和启用快捷方式的方法类似,在弹出的桌面组件中选择Folders,再选择需要添 加的Live Folders。2.2 开发流程a 在Activity注册时加入Action动作为android.intent.action.CREATE_LIVE_FOLDER的 IntentFilter。b 设置数据源intent.setData()方法来设置要读取的数据源。c 设置显示图标和名字等信息LiveFolders.EXTRA_LIVE_FOLDER_NAME :设置名称LiveFolders.EXTRA_LIVE_FOLDER_ICON :设置图标2.3 LiveFolders常用属性属性描述EXTRA_LIVE_FOLDER_BASE_INTENT选中选项执 行事件EXTRA_LIVE_FOLDER_DISPLAY_MODE显示模式(表格和宫格)EXTRA_LIVE_FOLDER_ICON名称EXTRA_LIVE_FOLDER_NAME图标2.4 Live Folders实现实时显示内容原理Live Folders本身并不储存任何信息,它是以映射 的方式查看其ContentPrivider所指向的数据,并 自定义拉显示格式,所以当原数据改变后, Live Folders可以实时更新内容。因此我们要确保指定 数据信息URI的ContentPrivider支持实时文件夹 的查询。建Android工程注册时加入action返回Home程序LiveFolders应加入数据源 ,显示格式,事件设置图标,名称图1 快捷方式和实时文件夹开发流程第三节 Widget开发Widget概述每个Widget就是一个BroadcastReceiver,它们用XML metadata 来描述Widget的细 节。AppWidget framework 通过Broadcast intents和 Widget通信,Widget的更新 使用RemoteViews来发送。RemoteViews被包装成一个Layout和特定内容来显示到 桌面上。Widget举例时钟程序:添加时钟Widget 显示实时的时间信息日历: 显示当天的日期天气预报: 显示当日天气股市信息: 股票信息图音乐播放器:播放后台音乐3.1 开发前需要了解的基础知识1AppWidget 和 Android.WidgetAppWidget是桌面组件的一部分,是Home的一个插件。 Android.Widget是 Android控件的聚合包,它提供Android常用的控件如:TextView,Button, EditText。AppWidget通过继承Appwidgetprovider实现控制,而Appwidgetprovider 是继 承BroadcastReceiver的,因此AppWidget是一个特殊的BroadcastReceiver。2它是Appwidget,它不是我们平常所用的Activity也就是说,很多适用于Activity的东西,Appwidget绝大多数都无法使用。 我们最常用的获取控件Id的方式,就是findviewbyid()。 Appwidget不支持这 种方法!而这个方法很重要,没了它很多东西基本上就类似判了死刑。 点菜交给后厨处理服 务 生老板处 理图 2 一般应用处理UI.java后台 代 码用 户图 3 对应程序设计Widget处理点菜交给后厨处理服 务 生老板处 理图 4 widget处理解决方法:使用RemoteViewsRemoteViews类描述了一个View对象能够显示在 其他进程中,可以融合从一个 layout资源文件实现布 局。虽然该类在android.widget.RemoteViews而不是 appWidget下面但在Android Widgets开发中会经常用 到它,主要是可以跨进程调用(appWidget由一个服务 宿主来统一运行的)。详见: http:/www.android123.com.cn/androidkaifa/320.html3.2 widget艺术设计标准:典型的android widget由三个部分组成:一个bounding box (包围盒),一 个frame(边框),还有widget的部分图形控件和其它部分。精心设计的 widget,填充在bounding Box和frame的边缘,还有些填充在frame边缘和 widget控制的内部。widget的设计,在主屏幕视觉上要适应其他widget,与 其它元素进行调整;也使用一些标准阴影效果。横向(320*480)3.3 Widget标准尺寸有六种标准widget尺寸,基于网格的主屏幕4 4 (人像)或4 4 ( 景观)单元格。这些外形尺寸是六个标准widget尺寸的bounding boxes。典型的 widget内容不画出返些尺寸的封装条,但适合一个在bounding box里面的frame 。在纵向,每个单元格是80像素(pixels)宽100像素(pixels)高 分别为: 4*1 3*3 2*2在横向,每个单元格是106像素(pixels)宽74像素(pixels)高 分别为: 4*1 3*3 2*2 横向:3.4 Widget框架3.4.1 AppWidget框架AppWidget是Android 1.5平台推出的一种崭新的应用程序框架。基于该框架 ,开发者可以在Android及模拟器上开发“外形”类似传统Widget的小应用程序 ,并将其嵌入到其他应用中。一个最典型的应用场景就是在主屏上灵活的添加 ,拖动和删除AppWidget应用。3.4.2 AppWidget应用框架中,常用的几个类如下:AppWidgetProvider: 继承自BroadcastReceiver,在AppWidget应用update, enable, disable和deleted时接受通知。其中,onUpdate,onReceive是最常用到的方法, 它们接受更新通知。 AppWidgetProviderInfo: 描述AppWidget的大小,更新频率和初始界面等信息。以 XML文件形式存在于应用的res/xml/目录下。 AppWidgetManager: 负责管理AppWidget, 向AppWidgetProvider发送通知 RemoteViews: 一个可以在其他应用进程中运行的类,是构造AppWidget的核心。 目前, Android平台上的RemoteViews支持的布局(Layout)类暂时只有Frame- Layout, LinearLayout和RelativeLayout,并且不支持自定义类。 3.4.3 AppWidgetProvider类的几个方法 AppWidgetProvider类继承BroadcastReceiver作为一个 便捷类来捕获App Widget广播(broadcasts). AppWidgetProvider只接收于这个App Widget有关的事件广 播(event broadcasts),例如当该App Widget被更新、删除、启用或禁用。当这些广 播事件发生,AppWidgetProvider进行以下方法调用: onUpdate(Context, AppWidgetManager, int) 这个方法在AppWidgetProviderInfo中的属性updatePeriodMillis定义的时间 间隔被调用来更新App Widget。该方法当用户添加返个App Widget时也被调用, 因此,它应履行基本设置,例如为Views定义事件捕捉器(event handlers),如果必要 并启动一个临时的Service。 然而,如果你已经声明了一个配置Activity, 当用户添 加该App Widget时此方法不会被调用,但是随后的更新时会被调用。当配置完成 时,配置Activitiy(configuration Activity)的任务是执行第一次更新。onDeleted(Context, int) 当一个App Widget自App Widget host中被删除,这个方法每次被调用.onEnabled(Context) 当一个实例 App Widget首次被创建时,这个方法被调用。例如,如果用户添加你 的两个App Widget实例,这个方法只在第一次被调用。如果你需要开启一个新的 数据库或是执行其他对于所有 App Widget 实例只需要发生一次的安装,那这个方 法中是一个很好的地方来做这个事情。 onDisabled(Context) 当你的最后一个App Widget实例被在App Widget host中删除时,此方法被调用。返 是你应该清理任何在onEnabled(Context)中做的事情,例如删除一个临时的数据库。onReceive(Context, Intent) 每一个广播此方法都被调用,并且先于以上回调方法。你一般不需要实现此方法 ,因为默认的AppWidgetProvider 实例过滤所有的App Widget broadcasts 并且在适 当时调用以上方法。一个可以捕捉其他App Widgets的应用程序组件被叫做App Widget host。3.5 AppWidget 的布局创建App Widget布局你必须在XML中为你的App Widget定义一个初始布局并且把它 保存在工程的res/layout/目录。你可以使用以下列出的View对象来设计你的App Widget。如果你熟悉在XML中声明布局,那创建App Widget布局很简单. 然而,你必须意识
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号