Android Widget桌面小部件二

一、Widget设计步骤
  需要修改三个XML,一个class:

  1.第一个xml是布局XML文件(如:main.xml),是这个widget的。一般来说如果用这个部件显示时间,那就只在这个布局XML中声明一个textview就OK了。

  2.第二个xml是widget_provider.xml,主要是用于声明一个appwidget的。其中,Layout就是指定上面那个main.xml。

  3.第三个xml是AndroidManifest.xml,注册broadcastReceiver信息。

  4.最后那个class用于做一些业务逻辑操作。让其继承类AppWidgetProvider。AppWidgetProvider中有许多方法,一般情况下我们只是覆写onUpdate(Context,AppWidgetManager,int[])方法。

二、代码案例

1.定义一个WidgetProvider, 用来处理Widget的一些CallBack
(1)OnEnable,创建第一个Widget时调用。
(2)OnDisable, 和OnEnable相反,创建最后一个Widget调用。
(3)OnDelete,Widget的一个实例被删除时调用。
(4)OnUpdate,当Widget需要更新它的View时调用。
(5)onReceive():此方法默认情况下处理BroadcastReceiver行为,并调用上面的方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class WidgetDemoAppWidgetProvider extends AppWidgetProvider{ 
   public void onUpdate(Context context, AppWidgetManager appWidgetManager, int [] appWidgetIds) { 
     final int N = appWidgetIds.length;    // Perform this loop procedure for each App Widget that belongs to this provider     
       
     for ( int i= 0 ; i
       int appWidgetId = appWidgetIds[i];             
       
       Intent intent = new Intent();       
       PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 , intent, 0 );             
       RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_demo_layout);       
       views.setOnClickPendingIntent(R.id.wap_app, pendingIntent);        
       appWidgetManager.updateAppWidget(appWidgetId, views);     
     }   
  
}

2.在AndroidManifast.xml 注册Provide

?
1
2
3
4
5
6
7
< receiver android:name = "WidgetDemoAppWidgetProvider"
   < intent-filter
     < action android:name = "android.appwidget.action.APPWIDGET_UPDATE" /> 
   intent-filter
   < meta-data android:name = "android.appwidget.provider" 
     android:resource = "@xml/widget_demo_appwidget_info" /> 
receiver >

3.创建Widget配置XML在xml文件夹下:

?
1
2
3
4
5
6
7
8
xml version = "1.0" encoding = "utf-8" ?>
  
< appwidget-provider xmlns:android = "http://schemas.android.com/apk/res/android" 
   android:minWidth = "60px" 
   android:minHeight = "60px" 
   android:initialLayout = "@layout/widget_demo_layout" 
  
appwidget-provider >

(4)创建Widget 的Layout

?
1
2
3
4
5
6
7
8
9
10
11
12
xml version = "1.0" encoding = "utf-8" ?> 
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" 
   android:orientation = "vertical" 
   android:layout_width = "fill_parent" 
   android:layout_height = "fill_parent" 
  
   < ImageView  
     android:id = "@+id/wap_app" 
     android:layout_width = "wrap_content" 
     android:layout_height = "wrap_content" 
     android:src = "@drawable/icon" /> 
LinearLayout >

你可能感兴趣的:(android基础)