zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    管理上第一是用人
    意义只存在于关系中,由其定义
    苦与累在希望面前啥也不是
    人是一切,组织是一切
    UI设计
    以理服人需要什么?
    灵活性是原则性基础上的灵活
    软件行业深层的文化属性
    自然原始分工
    把一个系统维护好需要做哪些工作?
  • 原文地址:https://www.cnblogs.com/xiaoxiaojia/p/5476628.html
Copyright © 2011-2022 走看看