当前位置: 代码迷 >> Android >> Android Widget 初始学习(二)
  详细解决方案

Android Widget 初始学习(二)

热度:83   发布时间:2016-05-01 17:55:30.0
Android Widget 初步学习(二)

   记得上次 初步的学到点只是,有个轮廓的概念,极其模糊的一些方法 周期介绍,今天来学习下wdiget程序

    Widget 开发

    1. 创建一个类,让其继承AppWidgetProvider,此类中有onDelete(context,int[] ),onEnable(context)方法等,一般的时候我们只要重写onUpdate(context ,AppWidgetManager , int[])这个方法就可以了,这个方法是当触发器更新Widget的时候被调用的,同时是被执行的操作

   2, 在清单文件Manifest文件中添加一个<receiver>标签,用于指向前面创建的AppWidgetProvider子类

  1. <receiverandroid:name="widget" 
  2.     android:label="@string/app_name" 
  3.     android:icon="@drawable/icon"> 
  4.       <intent-filter> 
  5.          <actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/>  
  6.      </intent-filter> 
  7.          <meta-dataandroid:name="android.appwidget.provider"  
  8.                android:resource="@xml/widget_setting"/>  
  9.     </receiver> 

intent-filter中过滤了APPWIDGET_UPDATE事件,这个事件是由系统触发的更新事件,每个widget必须包含这个事件;meta-data标签描述的是widget的配置文件指向,该文件描述了widget的一些基本信息。

3 ,编写Widget的Provider 文件信息,

  1. <?xmlversion="1.0"encoding="utf-8"?> 
  2. <appwidget-provider 
  3. xmlns:android="http://schemas.android.com/apk/res/android"  
  4. android:minWidth="100dp"  
  5. android:minHeight="100dp" 
  6. android:initialLayout="@layout/main"  
  7. android:updatePeriodMillis="1000"> 
  8. </appwidget-provider> minWidth和minHeight是widget的最小宽度和高度,这个值是一个参考值,系统会根据实际情况进行改变,initialLayout属性指明了widget的视图布局文件,updatePeriodMillis属性是widget每隔多久更新一次的时间,单位为毫秒。

(4)接下来就是界面布局,在这个示例中只需要一个TextView控件就可以,代码如下:

  1. <?xmlversion="1.0"encoding="utf-8"?> 
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     > 
  7. <TextView  
  8.     android:layout_width="fill_parent"  
  9.     android:layout_height="wrap_content"  
  10.     android:text="@string/hello"android:id="@+id/text"/> 
  11. </LinearLayout> 

 

准备工作完毕,接下来完善继承自AppWidgetProvider的自定义类,重写onUpdate(Context, AppWidgetManager,int[])函数,代码如下:

  1. package com.dt.time; 
  2.   
  3. import java.util.Date; 
  4.   
  5. import android.appwidget.AppWidgetManager; 
  6. import android.appwidget.AppWidgetProvider;
  7. import android.content.Context; 
  8. import android.widget.RemoteViews; 
  9.   
  10. public class widgetextends AppWidgetProvider { 
  11.   
  12.    @Override 
  13.    public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { 
  14.       // TODO Auto-generated method stub 
  15.       super.onUpdate(context, appWidgetManager, appWidgetIds); 
  16.        
  17.       //1. 获取当前时间 
  18.       Date now = new Date(); 
  19.       String strNow = now.toLocaleString(); 
  20.       //2. 获取RemoteViews对象 
  21.       RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main); 
  22.       //3. 显示时间到widget 
  23.       views.setTextViewText(R.id.text, strNow); 
  24.       //4. 更新widget 
  25.       appWidgetManager.updateAppWidget(appWidgetIds, views); 
  26.    } 
  27. 之后运行写好的widget查看下成果,widget的启动与普通程序不同,它不会在程序列表中显示,而是要长按桌面在弹出的列表中选择Widgets项目,之后选择本示例time

 

  相关解决方案