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. Hadoop学习笔记—6.Hadoop Eclipse插件的使用

    开篇:Hadoop是一个强大的并行软件开发框架,它可以让任务在分布式集群上并行处理,从而提高执行效率.但是,它也有一些缺点,如编码.调试Hadoop程序的难度较大,这样的缺点直接导致开发人员入门门槛高 ...

  2. A*寻路算法

    对于初学者而言,A*寻路已经是个比较复杂的算法了,为了便于理解,本文降低了A*算法的难度,规定只能横竖(四方向)寻路,而无法直接走对角线,使得整个算法更好理解. 简而言之,A*寻路就是计算从起点经过该 ...

  3. .Net组件程序设计之上下文

    .Net组件程序设计之上下文 在后续篇幅的远程调用的文章里有说到应用程序域,那是大粒度的控制程序集的逻辑存在,那么想对对象的控制又由谁来做主呢?没错了,就是上下文.CLR把应用程序域更细化了,在应用程 ...

  4. PHP 数据访问

    如何连接 1.造连接对象 $db= new MySQLi("localhost","root","123","mydb" ...

  5. jQuery Colorbox弹窗插件使用教程小结、属性设置详解

    jQuery Colorbox是一款弹出层,内容播放插件,效果极佳,当然我主要是用来弹出图片啦. jQuery Colorbox不仅有弹性动画效果,淡入淡出效果,幻灯片播放,宽度自定义,还能够ajax ...

  6. Java Thread 的使用

    Java Thread 的使用 Java Thread 的 run() 与 start() 的区别 Java Thread 的 sleep() 和 wait() 的区别   一.线程的状态 在正式学习 ...

  7. Java中Eclipse的使用

    Eclipse是跨平台的自由集成开发环境(IDE),初衷主要为Java语言的定制.第一次使用就喜欢上了它.它可以帮我们导入包,而不需要我们导入,有很多快捷键提供我们使用,方便节省时间:最值得我喜欢的是 ...

  8. Resource governor2:Configuration query

    SQL Server Engine 当前使用的configuration,称作 In-memory configuration,使用DMV:sys.dm_resource_governor_XXX查看 ...

  9. PS批处理的使用

    一. 前言 做开发的时候,最多的时候就是图片的使用了.有时候图片的处理都按照同样的步骤,比如说统一将图片的大小调整为固定大小,或者统一在所有的图片的的某个位置上加入文字或者小图片等等,这时候PS的批处 ...

  10. 追根溯源:EntityFramework 实体的状态变化

    阅读目录: 1. 应用场景 2. 场景测试 3. 问题分析 4. 追根溯源 5. 简要总结 1. 应用场景 首先,应用程序使用 EntityFramework,应用场景中有两个实体 S_Class(班 ...