android应用开发(十):widget的使用
1、自定义widget必须继承AppWidgetProvider
源码:http://www.jinhusns.com/Products/Download/?type=xcj
2、AndroidManifest.xml中必须注册
<receiver android:name=".widget.AppWidget" >
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/guide_widget" />
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
</receiver>
(1)receiver的name必须为自定义widget类名
(2)meta-data的name必须为android.appwidget.provider
(3)meta-data 的resource为该widget的描述文件,该文件必须放在res/xml路径下
(4)需要添加action增加监听receiver种类android.appwidget.action.APPWIDGET_UPDATE
3、res/xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/guide_widget"
android:minHeight="294.0dip"
android:minWidth="294.0dip"
android:updatePeriodMillis="1801000" />
(1)最外层标签必须为appwidget-provider
(2) android:initialLayout指定了widget使用的布局文件
(3)android:minHeight指定了widget的高度,android:minWidth指定了widget的宽度。这两个数值不能随意 指定,最好根据需要放置的widget所占据的屏幕行列数设定。例如,某widget为3行2列,则minHeight应为(3*74)- 2=220,minWidth应为(2*74)-2=146
(4)android:updatePeriodMillis该值为widget刷新时间,最好设置1小时以上,否则会严重浪费系统资源,耗电量会很大。每隔固定的该时间,系统就会调用该widget的onUpdate方法,如果该值为0,则表示不更新widget
4、widget继承自父类方法
(1)onEnabled(Context context)
该方法会在用户添加widget后调用
(2)onUpdate(Context context, AppWidgetManager
appWidgetManager,int[] appWidgetIds)
该方法会在用户添加widget后调用,用来刷新界面已经安装的widget(在onEnabled之后调用)。
appWidgetManager参数用来执行刷新界面的操作
appWidgetIds是该应用程序所有widget的id(用户可能添加多个,因此此处为数组)
(3)onDeleted(Context context, int[] appWidgetIds)
该方法会在widget被删除后调用(注意,是删除后,也就是说,该方法不是执行删除动作的)
(4)onReceive(Context context, Intent intent)
该方法是继承自receiver的,尽量不要使用,如果要使用,就需要你自己处理一些特殊代码,否则widget就会出问题
5、界面widget的刷新及点击事件
(1)在widget中,不能再使用findviewbyid方法获取组件,需要使用其他的方式。RemoteViews rv = new RemoteViews(context.getPackageName(),
R.layout.guide_widget);
RemoteViews 是一个虚构的组件,用它来承载layout。
(2) 点击layout中的某个组件启动activity或service
Intent intent = new Intent(context, WidgetDemoActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
rv.setOnClickPendingIntent(R.id.guide_0, pendingIntent);
(3) 界面刷新
appWidgetManager.updateAppWidget(appWidgetId, rv);
6、 widget支持在layout中使用的组件
FrameLayout、LinearLayout、RelativeLayout
AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView
7、 自定义widget类完整代码
public class AppWidget extends AppWidgetProvider {
RemoteViews rv;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
System.out.println(context.getPackageName());
final int N = appWidgetIds.length;
// 因为有可能用户添加了多个窗口小部件,所以这里需要遍历appWidgetIds
for (int i = 0; i < N; i++) {
System.out.println(appWidgetIds[i]);
int appWidgetId = appWidgetIds[i];
rv = new RemoteViews(context.getPackageName(),
R.layout.guide_widget);
Intent intent = new Intent(context, WidgetDemoActivity.class);
intent.setAction(context.getPackageName() + appWidgetId);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
intent, 0);
rv.setOnClickPendingIntent(R.id.guide_0, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
8、 widget生命周期(android1.6)
(1) 当用户拖拽widget到界面时,会按照顺序分别调用如下几个方法:onReceive-onEnabled-onReceive-onUpdate-onReceive-onReceive
(2) 当用户拖拽widget删除时,会按照顺序分别调用如下几个方法:
onReceive-onDeleted-onReceive-onDisabled
免费培训课:http://www.jinhusns.com/Products/Curriculum/?type=xcj
android应用开发(十):widget的使用的更多相关文章
- 十二、Android UI开发专题(转)
http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255Android UI开发专题(一) 之界面设计 近期很 ...
- !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...
- Android进阶(二十)AndroidAPP开发问题汇总(四)
· Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...
- Android UI开发第三十九篇——Tab界面实现汇总及比较
Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...
- Android UI开发第三十五篇——AppCompat实现Action Bar
每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年了.Android团队发布Action Bar设计规范时同时放出了ActionBar的Api来支持这种设计. ...
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- 使用 Android Studio 开发 widget 安卓桌面插件
•What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...
- Android UI开发第三十篇——使用Fragment构建灵活的桌面
http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...
- Android NFC开发概述
NFC手机相比普通手机来说,有以下3个附加功能: 1.可以当成POS机来用,也就是“读取”模式 2.可以当成一张卡来刷,也就是NFC技术最核心的移动支付功能 3.可以像蓝牙.Wi-Fi一样做点 ...
随机推荐
- Some warning were found during validation
前几天做一个iOS下的App更新,到上传的时候出了问题,一直传了大半个小时,结果还是没传完,再试依然不行,于是只好关机,把电脑带回家弄. 回家后出现了更奇怪的事,经过漫长等待后,竟然出现这个提示: 我 ...
- Struts2.X——搭建
今天是我第一次用博客,虽然还有好多的不懂,但是我还是会努力的把自己学到的写下来,分享给大家: 一,SSH框架中的struts2的搭建流程 1.在搭建struts2之前,我们首先要有struts2的ja ...
- Spark DAGSheduler生成Stage过程分析实验
RDD.Action触发SparkContext.run,这里举最简单的例子rdd.count() /** * Return the number of elements in the RDD. */ ...
- 朴素贝叶斯(NB)复习总结
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 贝叶斯分类算法是统计学的一种分类方法,其分类原理就是利用贝叶斯公式根据某 ...
- PHP运行及语句及逻辑
php开发网页需要存放在wamp根目录下的www文件夹中才可运行成功.同时wamp要处于运行状态. 无站点情况下打开方式: 网址栏中输入:localhost/文件名称 代码规范: 用 <?p ...
- mfc的OnInitDialog的返回值
以前从未注意过初始化函数的返回值,今天看到书中所述,以后可能用得上. OnInitDialog的返回值告诉windows如何处置输入焦点,如果返回 TRUE,则windows将输入焦点指派给制表键控制 ...
- java轻量级IOC框架Guice
Google-Guice入门介绍(较为清晰的说明了流程):http://blog.csdn.net/derekjiang/article/details/7231490 使用Guice,需要添加第三方 ...
- 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)
EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...
- Android_安卓为按钮控件绑定事件的五种方式
一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick ...
- TSQL “匹配全部”语义的实现
在TSQL中,有exists子句表示存在,表示匹配任意一行数据,但是,如何表示匹配全部的数据行.例如,表示一个学生选修了所有课程,这就是“匹配全部”语义的一个经典实例. 示例,获取“选修全部”课程的学 ...