简单掌握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行为,并调用上面的方法。
publicclassWidgetDemoAppWidgetProviderextendsAppWidgetProvider{ publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,int[]appWidgetIds){ finalintN=appWidgetIds.length;//PerformthisloopprocedureforeachAppWidgetthatbelongstothisprovider for(inti=0;i<N;i++){ intappWidgetId=appWidgetIds[i]; Intentintent=newIntent(); PendingIntentpendingIntent=PendingIntent.getActivity(context,0,intent,0); RemoteViewsviews=newRemoteViews(context.getPackageName(),R.layout.widget_demo_layout); views.setOnClickPendingIntent(R.id.wap_app,pendingIntent); appWidgetManager.updateAppWidget(appWidgetId,views); } } }
2.在AndroidManifast.xml注册Provide
<receiverandroid:name="WidgetDemoAppWidgetProvider"> <intent-filter> <actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-dataandroid:name="android.appwidget.provider" android:resource="@xml/widget_demo_appwidget_info"/> </receiver>
3.创建Widget配置XML在xml文件夹下:
<?xmlversion="1.0"encoding="utf-8"?> <appwidget-providerxmlns: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
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns: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>