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的使用的更多相关文章

  1. 十二、Android UI开发专题(转)

    http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255Android UI开发专题(一) 之界面设计 近期很 ...

  2. !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结

    http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...

  3. Android进阶(二十)AndroidAPP开发问题汇总(四)

    · Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...

  4. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...

  5. Android UI开发第三十五篇——AppCompat实现Action Bar

    每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年了.Android团队发布Action Bar设计规范时同时放出了ActionBar的Api来支持这种设计. ...

  6. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  7. 使用 Android Studio 开发 widget 安卓桌面插件

    •What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...

  8. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  9. Android NFC开发概述

    NFC手机相比普通手机来说,有以下3个附加功能:  1.可以当成POS机来用,也就是“读取”模式   2.可以当成一张卡来刷,也就是NFC技术最核心的移动支付功能  3.可以像蓝牙.Wi-Fi一样做点 ...

随机推荐

  1. ARM的常数表达式

    ARM的常数表达式   如果说Intel指令中的立即数,相信大家都很熟悉.类似的,Arm指令中的“立即数”就是常数表达式.之所以称为常数表达式,而不称为立即数是有原因的. Intel指令属于CISC指 ...

  2. 小型文件数据库 (a file database for small apps) SharpFileDB

    小型文件数据库 (a file database for small apps) SharpFileDB For english version of this article, please cli ...

  3. GitHub iOS-Top 100 简介

    GitHub排名前100的iOS第三方汇总简介,方便开发者选择适合的第三方框架. 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, ...

  4. python中configparser模块

    python中的configparse模块的使用 主要用来解析一些常用的配置,比如数据配置等. 例如:有一个dbconfig.ini的文件 [section_db1] db = test_db1 ho ...

  5. Sql Server系列:Update语句

    1 UPDATE语法结构 [ WITH <common_table_expression> [...n] ] UPDATE [ TOP ( expression ) [ PERCENT ] ...

  6. LINQ系列:Linq to Object聚合操作符

    聚合函数在一系列的值上执行特定的运算,并返回单个值,如在给定元素的值上执行求和或计数运算. LINQ共有7种聚合操作符:Aggregate.Average.Count.LongCount.Max.Mi ...

  7. jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 先来回答博友的提问: 如何解析 div > p + div.aaron input[type="checkb ...

  8. 使用pudb调试python

    本博客主要用于讲解如何使用pudb进行python调试: 1.安装 sudo pip install pudb pip list查看安装结果: 2.使用 测试程序: #!/usr/bin/env py ...

  9. 深入理解DOM节点类型第七篇——文档节点DOCUMENT

    × 目录 [1]特征 [2]快捷访问 [3]文档写入 前面的话 文档节点document,隶属于表示浏览器的window对象,它表示网页页面,又被称为根节点.本文将详细介绍文档节点document的内 ...

  10. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...