设为首页 加入收藏

TOP

Android -- AppWidget 初级篇
2014-11-24 12:11:38 来源: 作者: 【 】 浏览:0
Tags:Android AppWidget 初级

最近在写日历AppWidget(小部件)代码,遇到很多问题,AppWidget所支持的操作和View实在有限,动画效果根本不支持,就连Intent启动Activity、Service,和在TextView上显示简单的“HellWord”都显得变态。实现了日历小部件的日历显示、Button事件、翻页动画效果、onTouch事件等功能。下面就将整理的资料和自己的实践写了下来:


其实Appwidget是一个小型的Views,可以嵌入到其他应用程序并且定期更新。这些View被称为Widgets组件,您可以通过AppwidgetProvider去发布Widgets,能够容纳其他Appwidget的称为Appwidget host。




需要android:name属性,它指定Appwidget所使用的AppwidgetProvider.


至少需要包含 android:name="android.appwidget.action.APPWIDGET_UPDATE",这个属性指定AppwidgetProvider接收APPWIDGET_UPDATE广播,这是唯一一个需要明确声明的广播。当需要时,AppWidgetManaget自动给所有Appwidget发生广播.


指定了AppwidgetProviderInfo资源,需要一下属性:android:name 指定metadata的名字。使用android.appwidget.provider将其作为AppwProviderInfo的描述性数据


Android:resource 指定AppwidgetProviderInfo资源的位置




一个Appwidget的基本属性是通过AppwidgetproviderInfo去定义的,例如它的最小尺寸的布局,它的初始layout,多久更新Appwidget,还有(可选)在创建时期配置一个Activity。在xml资源中定义一个AppwidgetproviderInfo是通过标签,并保存在工程的res/xml/文件夹下,例如:


Configure属性是当用户添加一个AppWidget前启动一个Activity,这个Activity的作用就是配置Appwidget的属性。




只要你属性用xml怎么去定义layout的话,为appwidget定义一个layout还是很简单的。但是由于Appwidget的布局是基于RemoteVIew,所以只能使用RemoteViews(后面篇章将会对RemoteViews做详细分析)所支持的 layout(FrameLayout,LinearLayout,RelativeLayout)或者view(AnalogClock, Button , Chronometer ,ImageButton, ImageView, ProgressBar, TextView注意:继承这些类的子类同样不支持)。




Appwidgetprovider是BroadcastReceiver的子类,这个类处理Appwidget的广播。


Appwidgetprovider只接受于Appwidget有关系的广播,比如Appwidget在update,deleted,enabled,disable。当这些广播发生的时候,AppWidgetProvider会调用一下回调方法:



间隔调用此方法去更新Appwidget,间隔时间的设置时在AppwidgetproviderInfo下的updatePeriodMillis属性,同样当用户添加Appwidget的时候也被调用。如果你已经声明了一个configuration Activity,用户添加Appwidget的时候就不会调用onUpdate,但是随后的更新中依然会被调用。


onDeleted(Context, int[])


当Appwidget从Appwidget host中删除的时候调用


onEnabled(Context);


当Appwidget第一次创建的时候调用。比如,当用户增加两个同样的Appwidget的时候,这个方法只在第一次去调用。如果你需要打开一个新的数据库或者其他的设置,而这在所有的Appwidget只需要设置一次的情况下,这个是最后的地方去实现它们。


onDisabled(Context)


当Appwidget的最后一个实例从Appwidget host中删除的时候调用。这里可以做一些在onEnabled(Context)中相反的操作,比如删除临时数据库


onReceive(Context, Intent)


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 汉字的正则表达式 下一篇Android -- AppWidget 进阶篇

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)