浅谈如何给 appwidget 添加复杂 view

  次阅读 来源:互联网(转载协议) 2016-01-14 09:50 我要评论(0)

我们都知道android原生的widget只支持极少数几个简单的view,所以功能及其简单。很多人都希望在AppWidget添加ListView、GridView等复杂的view来实现更为复杂的功能。我们知道要在AppWidget里添加 View都是通过RemoteView来做到了,然而RemoteView本身功能很弱,支持的操作很少,而且支持RemoteView的Widget很少:

A RemoteViews object (and, consequently, an App Widget) can support the following layout classes:

* FrameLayout

* LinearLayout

* RelativeLayout

And the following widget classes:

* AnalogClock

* Button

* Chronometer

* ImageButton

* ImageView

* ProgressBar

* TextView

Descendants of these classes are not supported.

要实现上述功能通常有两种做法:

1. 修改framework层:

以上这些view都是在类名前面加了 @RemoteView,这样才被AppWidget所识别。网上有人流传着既然通过@RemoteView这个标签来确定RemoteView是否支持view.在view的源文件加上@RemoteView这个标签就可以支持了。这是错误的一个思想,添加RemoteView这个标签能实现的仅仅是能够在给AppWidget添加这个view的时候不会报错,但是确无法实现你所想要的功能。我们知道RemoteView是用来描述一个垮进程显示的view。 所以你的view还需要做很多有关进程间通信的事情。这个比较复杂,一般只有对framework比较牛的大神才可以做,如HTC等厂家就支持。android 3.0以后的版本也可以支持一些复杂的RemoteView,可是现在还没有开源~~~

修改framework层的优点是:可以让所有允许于该平台的launcher都可以添加这些复杂的AppWidget。

缺点是:需要的知识技能太深,一般人无法匹敌。

2. 修改launcher

我们知道诸如ADW ,GO桌面,launcher plus等主流通用桌面都可以支持带有listview的AppWidget。他们是如何实现的呢?他们的代码中都包含有一个mobi.intuitit.android.widget ,代码发布于http://code.google.com/p/android-launcher-plus/

通过在launcher中添加上述代码便可以使用针对这个框架实现的一些appwidget,例如桌面滚动联系人:ContactWidget。

具体如何实现,这个网上的资料不是很多,我也没有研究很深入,有兴趣的童鞋可以尝试着反编译ContactWidget查看他的实现流程。

上述修改方法的优点是:具有一定的通用性,针对系统开发人员来说,按照上述修改了launcher便可以使用这一个框架的一系列的appwidget。对于应用开发人员来说开发的appwidget可以使用在诸如ADW,go桌面等这一系列的桌面上

缺点:appwidget的编写较为复杂 ,在我的资源里边有一个使用这个框架编写的widget,大家有兴趣的可以看看~~http://download.csdn.net/source/3305935

3.实现一个伪widget

如果你需要实现的是一个仅能在你自己的launcher上使用的widget,那么下面介绍的方法便很适合你。

不知道大家有没有见过Dell Stage这个桌面,反编译(邪恶的笑)后便会惊奇的发现,那些看似widget的widget,其实都不是appwidget,而是一个个activity,震惊!愕然!有木有?

稍稍研究之后便发现其中的奥秘并不复杂,甚至比之前的两种方式更为简单。

public final class Launcher extends Activity implements

View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,

AllAppsView.Watcher {

原生的launcher.java中Launcher是继承于Activity的,所以无法在其中嵌入activity,所以我们首先需要修改public final class Launcher extends ActivityGroup implements

View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,

AllAppsView.Watcher {

继承于 ActivityGroup之后便可以在 Launcher中嵌入activity了。

使用

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...