Widget的基本知识与历史渊源

news/2024/7/6 4:02:14

一、Widget是什么?

    App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget Provider来发布一个Widget。官方文档地址:《App Widgets》


这里涉及到两个方面的内容:AppWidgetProvider类和appwidget-provider标签;
1、appwidget-provider标签:
   这个玩意是用来定义桌面widget的大小,初始状态等等信息的,它的位置应该放在res/xml文件夹下,具体的xml  参数如下:
  android:minWidth : 最小宽度
  android:minHeight : 最小高度
  android:updatePeriodMillis : 更新widget的时间间隔(ms),"86400000"为1个小时
  android:previewImage : 预览图片
  android:initialLayout : 加载到桌面时对应的布局文件
  android:resizeMode : widget可以被拉伸的方向。horizontal表示可以水平拉伸,vertical表示可以竖直拉伸
  android:widgetCategory : widget可以被显示的位置。home_screen表示可以将widget添加到桌面,keyguard表                 示widget可以被添加到锁屏界面。
  android:initialKeyguardLayout : 加载到锁屏界面时对应的布局文件
                至于具体怎么用,等下实战的时候会讲。


2、AppWidgetProvider类:
上面我们通过appwidget-provider标签就可以得到初始化的布局,视图等,但我们的widget要实时更新怎么办,要响应用户操作怎么办,这就需要额外的类来辅助处理了,这个类就是AppWidgetProvider。
由于AppWidgetProvider要接收到当前widget的状态(是否被添加,是否被删除等),所以要接收通知,必然是派生自BroadcastReceiver。
AppWidgetProvider中的广播处理函数如下:(根据不同的使用情况,重写不同的函数)
onUpdate():
在3种情况下会调用OnUpdate()。onUpdate()是在main线程中进行,因此如果处理需要花费时间多于10秒,处理应在service中完成。(第二篇会讲为什么还要有service)
(1)在时间间隔到时调用,时间间隔在widget定义的android:updatePeriodMillis中设置; 
(2)用户拖拽到主页,widget实例生成。无论有没有设置Configure activity,我们在Android4.4的测试中,当用户拖拽图片至主页时,widget实例生成,会触发onUpdate(),然后再显示activity(如果有)。这点和资料说的不一样,资料认为如果设置了Configure acitivity,就不会在一开始调用onUpdate(),而实验显示当实例生成(包括创建和重启时恢复),都会先调用onUpate()。在本例,由于此时在preference尚未有相关数据,创建实例时不能有效进行数据设置。
(3)机器重启,实例在主页上显示,会再次调用onUpdate()
onDeleted(Context, int[]):
当 widget 被删除时被触发。
onEnabled(Context):
当第1个 widget 的实例被创建时触发。也就是说,如果用户对同一个 widget 增加了两次(两个实例),那么onEnabled()只会在第一次增加widget时触发。
onDisabled(Context):
当最后1个 widget 的实例被删除时触发。
onReceive(Context, Intent):
在接收到广播时,调用。


二、Widget的历史

⒈ Widget的这个创想来自一个叫做Rose的苹果电脑工程师。98年的一天,Rose在自己的苹果操作系统桌面玩一个可以更换皮肤的MP3播放器时忽发奇想:如果在我桌面上运行的所有工具都能够更换皮肤或外观,那将是一件很酷的事情,Rose的兴奋之情溢于言表,它给这个酷酷的玩意儿起了个名字叫"Konfabulator"。


⒉ Konfabulator是运行在用户电脑桌面上最炫的东西,就像一部老爷车一样有无数能够发挥功用并值得深入探讨的零部件,带有吸引人的神奇魅力。Rose从1999年到2001年之间,不断向自己身边的工程师宣传自己对于Konfabulator的看法和它的奇幻魔力,却没有人对它感兴趣。直到2002年的一天,Rose遇到了一个叫做Perry的工程师。两人拥有对于Konfabulator这件事情同样的构想,于是一拍即合。

⒊ 于是两人开始共同为了这个炫酷的玩意儿在深夜努力工作,他们开辟了一个和Konfabulator相关的网站向大家传播这个想法,并在论坛中征询网友的意见"到底什么才是真正的Konfabulator?"大家的说法是千奇百怪的,有人说它是一个运行在用户桌面的加热器,有人说它是桌面宠物,有人说它是张牙舞爪的机器人。但是没有人对于Konfabulator的描述是确切的。

⒋ 终于在2003年2月10日的深夜,Konfabulator1.0正式版在Rose和Perry的共同努力下正式发布了。它是运行在苹果操作系统之上的小工具,其中的主运行文件叫做Widget,在Rose头脑中酝酿了5年的想法终于第一次问世了。并且向所有人宣布Konfabulator是运行在用户桌面上最独一无二的工具,你希望它是什么样子,它就能按照你的想法而改变。

⒌ Konfabulator意想不到的快速在全美疯狂的蔓延着,Rose和Perry感到非常的吃惊,同时他们也认识到这将会成为Konfabulator发展历史上非常关键的一个时期,于是两个人都辞去了各自的工作,开始专注于Konfabulator这件事情。

⒍ 在2003年的7月Konfabulator1.5版本发布了,主运行文件Widget的开发变得风靡一时,越来越多的人参与其中,也因为如此Konfabulator更名为Widget。Widget在苹果操作系统中所表现出的热潮,使得Rose和Perry认为它应该有更广的应用领域。于是在接下的半年中Perry的一个朋友参与到开发Widget Windows平台版本的工作中来,但最开始的一些尝试都是失败的。

⒎ 不久之后Rose找到了一个自己的好朋友ED,ED是苹果电脑公司工作超过十年有着深厚资历的一名优秀的开发工程师。在和他沟通Windows平台下开发Widget的事情之后,ED认为Rose希望在Windows平台下运行Widget的想法有些不可理喻。Rose和Perry开始很失望,但令他们感到吃惊的是,两天以后ED居然拿出了一个Windows平台下运行的Widget原型。

⒏ 2004年的11月Widget1.8版本正式对外发布了,由此开始Widget进入了一个新的时代,成为了跨平台的产品。使用Windows和Mac操作系统的用户都可以使用和开发自己喜欢的Widget工具。当然这还仅仅只是一个开端。

⒐2005年07月25日,雅虎收购插件引擎Konfabulator。Konfabulator是基于mac osx和windows操作系统的免费的应用平台。但是在被计算机服务公司雅虎收购后,它被重新命名了。名字Konfabulator 随后恢复作为后台运行的服务引擎的名字。这个引擎使用java脚本运行环境和XML解析器来运行一些所谓插件的小应用程序。因此是插件引擎一类应用程序的一部分。

⒑2006年8月22日,雅虎中国发布了其最新产品Widget中文版。

11.2006年6月,Google桌面4.0正式发布,其中集成了很多Google小工具(Google Gadgets)。

⒓2005年下半年,Windows Vista上市,小工具第一次与消费者见面。一些评论家与Mac爱好者迅速地指出Windows边栏在形式及功能上与苹果公司的Dashboard以及Yahoo! Widget Engine(原为Konfabulator)相似。虽然现时有许多相似形式及功能的产品,边栏在Windows Vista开发期间(当时代号为Longhorn)已经存在。首个包含该功能的版本号于2002年9月发布,在Konfabulator或Dashboard两者发表之前。2009年,Windows 7发布,"Windows边栏"消失。小工具摆脱了边栏的束缚,在收缩模式下也可以在屏幕上自由移动。

⒔2006年10月,诺基亚发布"维信"英文版,被看作其开拓移动互联网领域的第一步。2007年5月25日,"维信"在全球范围内的注册用户达到100万。当时英文版维信已集成诸如Wikipedia、Technorati、Digg和Flickr等网站;而维信中文版集成大众点评网、豆瓣和一些中国本地博客等很多中文网站的应用。2009年8月,维信在官网上发出了公告,决定停止维信服务。维信在中国开办了2年后,终于也退出了人们的视线。


14.2009年4月30日,官方1.5版本(Cupcake 纸杯蛋糕)的Android发布。主屏幕增加音乐播放器和相框widgets。

⒖ 2010年10月,微软公司正式发布Windows Phone智能手机操作系统的第一个版本Windows Phone 7,加入了特有的动态磁贴(Live Tiles),尽管与Widget有着看似相似的信息传递功能,却有着不同的设计原理和理念。

折叠编辑本段特征

widget具有哪些特征呢? 《网络整合营销兵器谱》一书中提出了以下几点

1.身材微:它们一般都很小,在终端上嵌入非常方便,运行快速。

2.形式多:Widget可以以多种形式呈现出来,幻灯秀、视频、地图、新闻、小游戏……

3.功能巨:别看它们小,却服务周到,它可以为你报告新闻、帮你买东西、列出你最喜欢的乐队,还有你看的视频。另外,它还是一个殷勤的管家,你不必亲自去Flickr或者天气预报网站,Widget会将信息主动带给你。

4.姿容丽:它们可以称得上玉面飞龙、以色服人。只要你愿意,你可以把它变成任何你想要得样子。它的出现,无异于一枚"桌面炸弹",狭窄而单调的IE窗口将被更为广阔和绚丽的桌面空间所取代。

5.个性化:Widget更像一个属于我们每个人的魔方,任由用户聚合。你可以根据自己喜好,将多个Widget,随心所欲的去精心组装你的网络世界。通过Widget,可以用户把一切在"网"中的内容打乱重来,并按照用户希望看到的样子重新排列组合一个属于自己的互联网。比如说一个由微件搭建个人空间,可以包括来自新浪的体育新闻,来自论坛的一个板块,来自权威财经网站的一则随时更新的股票信息--这些以往需要用户同时分别进入几个网站才能看到的信息,由一个个微件将其转变为用户个人空间的一部分,从而可以直接在同一个页面中并存。传统互联网访问方式处于分裂状态的后Web2.0时期,多样性、炫酷且更具个性化的Widget流行,或许能引领一个新的潮流。

6.易制作:制作 Widget 部件并不复杂,只需要熟悉三方面的知识:图像处理、HTML/XML、java,就可以按照开发站点里的教程做出漂亮的部件来。Widget能够流行的一个要点在于开放制作,UGC应用带来爆炸式地增长。

参考资料来源

1、http://blog.csdn.net/harvic880925/article/details/41445407

2、(《网络整合营销兵器谱》辽宁出版集团 刘东明)


http://www.niftyadmin.cn/n/3649560.html

相关文章

华为云青年开发班:黑白棋游戏开发

放假回家第一天,继续肝!写一篇博客证明我还在! 实验成果 任何时候都不要放弃自己的梦想,也许下一刻,梦想就会成真了呢!

[论道]Sales职业生涯规划 作者:李楠

Sales职业生涯规划 作者:SPN睿商在线-李楠- 2005-08-02 聪明的Sales了解自己的职业生涯发展方向,知道自己适合做哪种类型的销售……讲述者和推销者 讲述型的Sales只会倾倒,推销型的Sales会洞察客户需求…… 孙:最近看了一本《竞争…

用switch语句编写程序_如何在Go中编写switch语句

用switch语句编写程序介绍 (Introduction) Conditional statements give programmers the ability to direct their programs to take some action if a condition is true and another action if the condition is false. Frequently, we want to compare some variable again…

桌面widget详解(一)——基本demo构建

前言:这段时间真的是有点堕落了,没怎么看书,项目也做的乱七八糟,基本没什么长进,好像男人也有生理期一样,每个月总有那么几天提不起精神,等自己彻底感到罪恶感的时候再重新整装前行。这几天做桌…

[Wap] 制作自定义WmlListAdapter来实现Mobile.List控件的各种效果

[Wap] 制作自定义WmlListAdapter来实现Mobile.List控件的各种效果编写者日期关键词郑昀ultrapower2005-8-18Wap ASP.NET Mobile control device adapter自定义的mobile.List的横排效果现有的mobile.List输出效果,每一个Item之间一定会换行,如果你看了Wml…

华为云微认证考试简介

我最近参加了华为云的微认证考试,并且成功的拿到了证书,所以分享一下华为云微认证考试 什么是微认证? 华为云微认证是基于线上学习与在线实践,快速获得场景化技能提升的认证。华为云微认证官网 华为云微认证视频介绍 华为云微认…

Android XUtils 框架简介

xUtils简介 xUtils 包含了很多实用的android工具。xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...xUitl…

自定义字体 webpack_创建一个自定义Webpack插件

自定义字体 webpackIf you’ve ever worked with webpack, you’ve probably heard of webpack plugins. Plugins are a great option for extending webpack’s implementation and architecture. If you look at webpack’s source code, around 80% of their code is implem…