以前我们所见的Widget都是以Activity为主体的,但是在Android手机桌面(Home Screen AppWidgets)上的"小玩意"皆是属于桌面上的Android AppWidget。
类关系:
java.lang.Object
↳ android.content.BroadcastReceiver
↳ android.appwidget.AppWidgetProvider
AppWidget 框架类
1、AppWidgetProvider :继承自 BroadcastRecevier , 在AppWidget 应用 update、enable、disable 和 delete 时接收通知。其中,onUpdate、onReceive 是最常用到的方法,它们接收更新通知。
2、 AppWidgetProvderInfo:描述 AppWidget 的大小、更新频率和初始界面等信息,以XML 文件形式存在于应用的 res/xml/目录下。
3、AppWidgetManger :负责管理 AppWidget ,向 AppwidgetProvider 发送通知。
4、RemoteViews :一个可以在其他应用进程中运行的类,向 AppWidgetProvider 发送通知。
生命周期:
1、onDeleted(Context context, int[] appWidgetIds)删除一个AppWidget时调用
2、onDisabled(Context context)删除最后一个AppWidget是调用
3、onEnabled(Context context)AppWidgetProvider实例化时调用
4、onReceive(Context context, Intent intent)
注意:因为 AppWidgetProvider 是继承自BroadcastReceiver 所以可以重写 onRecevie 方法,当然必须在后台注册Receiver
5、onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)向桌面添加一个AppWidget时调用。
那么如果创建这么一个工程呢?
1、新建AppWidgetProvderInfo
2、写一个类继承自AppWidgetProvider
3、后台注册Receiver
配置文件说明:
1. res/xml/appwidgetprovider_info.xml,该文件是AppWidgetProvderInfo对象,用来描述 AppWidget 的大小、更新频率和初始界面等信息。
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dip"
android:minHeight="72dip"
android:updatePeriodMillis="60000"
android:initialLayout="@layout/appwidget_layout">
</appwidget-provider>
android:initialLayout="@layout/appwidget_layout" 此句为指定桌面组件的布局文件。
2. appwidget_layout.xml, appWidget的布局文件,也就是显示在homescreen上的remoteviews,你可以根据自己需要配置适当的布局。
<?xml version="1.0" encoding="utf-8"?>
<!-- appWidget的布局文件,也就是显示在homescreen上的remoteviews -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv_appwidget"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="WidgetDemo"
/>
</LinearLayout>