wo-08 10-21 dfeixtay ori
AppWidget 详解
最近又写了一个Widget,第二次写了,许多之前没有搞清楚的东西,这次更加清楚了一些。首先记录一下AppWidget的基本框架,Widget更新条件,然后把两次写Widget的基本流程记录下来供今后查阅。
先说几句题外话,首先是觉得,总是周而复始的重复一件工作,比如修改程序bug,真累,觉得总在打酱油,自己也难受,到不如动手写程序,我知道,这是耐心不够的表现。另外,刚看到了一篇将程序员经验的文章,一会儿转过来。
今天还知道了,打更的更念geng(一声),这个拼音音调不会打,自己之前想到的要把uft8啦gbk啦的编码弄清楚也没有弄清楚。从以往的表现来看,脑袋里的想法付诸于时间,基本最短还要两个月的时间,这样也就错过了很多机会。
AppWidget的基本框架是,手边没书,靠记忆说了,桌面launcher里面有一个AppWidgetHost,用来支持桌面上放置的Widget,这个如果不动launcher的话,一般不会用到。据说下一代系统支持在Activity中调用Host,也就自然可以在Activity里防止Widget,具体不知,或许现在就可以。
接下来是AppWidgetInfo,通常就是res/xml里面的widget.xml,xml的命名貌似只能用小写,也可以在.java里面实现这个Info,不过一般xml里更加简单,所以就都写在这里了。
下面就是真正的AppWidget,由它来控制整个Widget,但是有很大的局限性,不仅可以实现的布局很少,只有3类布局,7种还是9种控件,发挥的余地就很小,当然也不是完全不能发挥,只是都要自己动手写,比较麻烦。 AppWidgetProvider中继承几个on方法,可以在对应时间的时候自动调用,一般用到的就是onUpdate,用来更新UI。其次AppWidgetProvider内不支持线程,线程需要在另外启动的支持的类里使用,如Activity or Service。最后,听说AppWidget不支持animation,我想写至今还没有来得及实现,不行就只能连续的刷新图片咯。
关于AppWidget,或者说是刷新UI的条件,更新Widget UI的条件有三个:
1,每生成一个Widget都对应一个AppWidgetId,需要对这个Id进行刷新,这也是onUpdate函数中对这个Id数组遍历for的含义。
2,Widget中的UI是通过一个RemoteView类实现的,根据字面含义,这个View是允许其他远端程序调用并更新的,此为remote的含义。RemoteView支持的组件很少,刚才说过。在程序中,我好像看到了,这个RemoteView的实例必须只有一个,就是必须是同一个,否则更新无效,这个还需要进一步验证。貌似别人也没怎么说。
3,AppWidgetManager,由它的update方法加参数实现当前的Widget视图更新。
有了这3个条件,可以在任何的Activity或是Service里面更新Widget的UI。
我又想说说看代码的问题,看了一个代码,每个函数都在一屏以内,符合经常听到的优秀代码的样式,比较牛。看别人的代码怎么就那么累呢?看不懂,变量名记不住。但是,在实际的开发中,多看代码无疑是有好处的,今天就体会到了两处。稍后奉上。
我建立一个新的AppWidget骨架的流程是:
1,建立工程,修改Manifest,AppWidget实际继承的是Broadcast,所以标签是<receiver>,重要的是在其中加上meta-data信息,表示它是一个Widget。关于其他用到的,activity什么的,可以修改category让它不显示出来,category的东西有空我还要查查。
记得添加必要的permission。
2,添加java文件,传说中的AppWidgetProvider,自动添加里面的几个on回调函数。实现自己的逻辑。
在AppWidgetProvider中,利用intent,可以启动3个类,分别是(send)Broadcast,Activity和Service。其中Service可以绑定Broadcast receiver,这个比较有用。
既然Widget什么都不支持,很多东西可以用广播通知Service去做!
3,添加AppWidgetInfo,就是res/xml下的文件,是对Widget的说明文件,定义宽高什么的,定义自动刷新时间,据说这个功能在最近的版本中已经取消了,定时刷新现在都是用Service + 定时实现的,实际程序中也确实没用,不知道为什么。
这里另外一个要说明的就是configure,今天刚刚实现。它是一个activity,可以在加载Widget到屏幕之前进行一些必要的设置,可选。需要注意的是,configure要负责第一次更新Widget的UI,否则Widget无法画到屏幕上去。
4,最后在AppWidgetProvider中,启动的Activity或者Service中,完成逻辑操作。修改必要的关联名称,就可以实现一个简单的Widget啦。
今天从菜市口下了几个Widget应用,发现有许多做的相当不错,自己做的东西虽然只有雏形,就已经显示出了落后。看来,在软件写好,到一定阶段,必要的重构是必不可少的,一定不要舍不得!删掉冗余代码的时候,不要舍不得。
今天话怎么这么多这么啰嗦。代码例子有机会再来补上。
分享到:
相关推荐
总结起来,"brew Form和widget详解中文版"这份文档提供了Form和Widget在特定框架下的详细技术指南,帮助开发者理解如何构建和管理用户界面,实现丰富的交互功能。通过学习这些内容,开发者能够更好地设计和实现符合...
对应源码的文件名为《桌面widget详解(一)——基本demo构建》源码,可以通过这个源码来辅助理解本文的讲解。 首先,我们要了解Android桌面小部件的基本结构。它由一系列XML布局文件和一个AppWidgetProvider类组成...
博客《桌面widget详解(三)——桌面widget中的控件交互方法》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/41598819
在Android平台上,开发一款桌面音乐播放器Widget是一个有趣且实用的实践项目。本文将深入解析如何利用Android的App Widget API创建一个能够在用户桌面运行并控制音乐播放的应用组件。通过源码分析,我们可以学习到...
### 创建窗口小部件与AppWidget详解 在Android系统中,窗口小部件(AppWidget)是一种能够让用户在Home屏幕上获取应用信息和快捷操作的小部件,它也是实现Launcher功能的一部分。创建AppWidget主要涉及以下几个关键...
了解了基本概念后,开发者可以通过阅读《Android 之桌面组件 App Widget 案例》、《Android Launcher开发之桌面小部件AppWidget详解》以及相关的博客文章来深入学习。这些资料提供了丰富的实例和代码解析,帮助理解...
"Widget桌面"是一款基于Widget技术开发的桌面插件应用。Widget技术在Android系统中被广泛应用,它允许开发者创建小型、可自定义的UI组件,这些组件可以直接显示在用户的主屏幕上,提供快速访问或操作的功能。这个...
**Android之AppWidget详解** AppWidget是Android操作系统提供的一种组件,允许开发者在用户主屏幕上创建小型应用程序,这些小部件无需用户直接启动应用就能显示和交互。AppWidget为用户提供了一种快速访问应用功能...
**Android AppWidget详解** 在Android开发中,AppWidget是一种可以在用户主屏幕上展示的小应用程序,它无需用户打开实际应用即可提供一些基本功能或显示信息。AppWidget是Android系统的一个独特特性,使得开发者...
### Dropthings创建自定义Widget详解 #### 一、Dropthings简介与环境搭建 Dropthings是一款基于ASP.NET MVC的开源框架,用于快速构建可定制化的Web应用程序。它支持通过Widget(小部件)的形式来扩展功能,这使得...
### QT学习笔记Widget详解 #### 一、QT基础概念与组件使用 在开始探讨QT中的Widget之前,我们先简要回顾一下QT的基础概念。 - **QT框架简介**:QT是一个跨平台的应用开发框架,支持Windows、Linux、Mac OS等多种...
**安卓源码圆形可触摸进度条Widget详解** 在Android开发中,用户界面设计至关重要,尤其是在用户体验上。这个名为"安卓源码圆形可触摸进度条Widget.zip"的压缩包文件提供了开发者一个实用且具有吸引力的组件:圆形...
**Android小部件(Widget)详解** 在Android平台上,小部件(Widget)是用户可以在主屏幕上放置的应用组件,它们提供了一种轻量级的交互方式,让应用能够在用户无需打开应用本身的情况下显示信息或执行简单的操作。...
【Widget的介绍与详解】 Widget,这个词源自英语,是一个通用术语,用来描述各种小型应用程序或组件,它们可以在不同平台上以小窗口或小框的形式呈现,为用户提供便捷的功能或信息展示。Widget广泛应用于网页、系统...
【Android Widget小组件详解】 Android Widget是Android系统中一种特殊的应用组件,允许开发者在用户的主屏幕上提供快捷操作或信息展示。这些小组件虽然不像应用程序那样全功能,但它们提供了便捷的交互方式,使得...
第5章 良好的学习开端 控件 Widget 详解 第6章 友好的菜单 Menu介绍与实例 第7章 友好地互动交流 信息提醒 对话框 Toast与Notification 第8章 移动的信息仓库 数据存储 第9章 Android中的窗口 Activity 第10章 全局...
**Laravel 开发 - Widget 系统详解** 在 Laravel 框架中,Widget(小部件)是一种可重用的代码块,它封装了特定的功能或界面元素,可以在多个地方轻松地插入和使用。这种设计模式有助于保持代码的整洁和模块化,...