怎么这篇文章被C博客审核后,排版就变成这样的垃圾了。。。。
参考资料链接
http://blog.csdn.net/y13872888163/article/details/6346723
http://www.cnblogs.com/skywang12345/p/3158310.html-----写的非常系统非常好,膜拜
http://www.cnblogs.com/skywang12345/archive/2013/06/14/index.html
1、在res下新建一个xml文件夹,写个appwidget_info.xml描述一个App Widget元数据,比如App Widget的布局,更新频率,指定在home中显示样式的布局文件。这个应该在XML里定义。
<?xml version="1.0" encoding="UTF-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="50dp" android:minHeight="50dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/widget_layout" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen|keyguard" android:previewImage="@drawable/dingdangcat" /> <!-- android:updatePeriodMillis="86400000"是设置更新时间,86400000毫秒是一天 android:initialLayout="@layout/widget_layout"是引用的布局文件 minWidth 和minHeight 它们指定了App Widget布局需要的最小区域,缺省的App Widgets所在窗口的桌面位置基于有确定高度和宽度的单元网格中。如果App Widget的最小长度或宽度和这些网格单元的尺寸不匹配,那么这个App Widget将上舍入(上舍入即取比该值大的最接近的整数——译者注)到最接近的单元尺寸。 注意:app widget的最小尺寸,不建议比 “4x4” 个单元格要大。关于app widget的尺寸,后面在详细说明。 previewImage 指定预览图,该预览图在用户选择 widget 时出现,如果没有提供,则会显示应用的图标。这个图标是在widget中显示的,在Home中显示的图片在layout中定义 resizeMode 指定了 widget 的调整尺寸的规则。可取的值有: "horizontal", "vertical", "none"。"horizontal"意味着widget可以水平拉伸,“vertical”意味着widget可以竖值拉伸,“none”意味着widget不能拉伸;默认值是"none"。Android 3.1 引入。
initialLayout下面几个还未尝试 autoAdvanceViewId 指定一个子view ID,表明该子 view 会自动更新。在 Android 3.0 中引入。widgetCategory 指定了 widget 能显示的地方:能否显示在 home Screen 或 lock screen 或 两者都可以。它的取值包括:"home_screen" 和 "keyguard"。Android 4.2 引入。initialKeyguardLayout 指向 widget 位于 lockscreen 中的布局资源文件。Android 4.2 引入。-->指定在Home中显示的样式的布局文件
2、在res下layout中新建widget_layout.xml,用于指定显示在Home上的样式
<?xml version="1.0" encoding="utf-8"?> <!-- 设置widget在home中显示的样式 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/widgetTextId" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="myfirstAppwidget" android:background="#000000" /> <ImageView android:id="@+id/iv_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/doctor" //在Home中显示的图标 android:layout_gravity="center"/> </LinearLayout>
3、在AndroidManifest.xml中声明
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.s02_05_appwidget" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.s02_05_appwidget.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="ExampleAppWidgetProvider"> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info"/> </receiver> </application> </manifest>
说明:
(01) ExampleAppWidgetProvider是继承于的AppWidgetProvider类,用来响应widget的添加、删除、更新等操作。
(02) android.appwidget.action.APPWIDGET_UPDATE,必须要显示声明的action!因为所有的widget的广播都是通过它来发送的;要接收widget的添加、删除等广播,就必须包含它。
(03) <meta-data> 指定了 AppWidgetProviderInfo 对应的资源文件 android:name -- 指定metadata名,通过android.appwidget.provider来辨别data。
(04) android:resource -- 指定 AppWidgetProviderInfo 对应的资源路径。即,xml/example_appwidget_info.xml。
4、实现AppWidgetProvider的类,
在src中新建ExampleAppWidgetProvider.java,继承AppWidgetProvider,实现其中的方法
package com.example.s02_05_appwidget; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; public class ExampleAppWidgetProvider extends AppWidgetProvider{ @Override // public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { System.out.println("onUpdate每次更新调用"); super.onUpdate(context, appWidgetManager, appWidgetIds); } @Override // public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub System.out.println("onDeleted每次删除调用"); super.onDeleted(context, appWidgetIds); } @Override // public void onDisabled(Context context) { // TODO Auto-generated method stub System.out.println("onDisabled最后一个删除调用"); super.onDisabled(context); } @Override // public void onEnabled(Context context) { // TODO Auto-generated method stub System.out.println("OnEnabled第一次创建调用"); super.onEnabled(context); } }
遗留问题-----OnDisabled,和OnEnabled的功能没有实现,悲剧