AppWidget 就是我们使用的窗口小部件
实现appwidget非常简单,只需要一下几个步骤就OK
1.在 /res/layout 中建立一个 布局文件.此布局文件就是 窗体小部件 的"样子"
2.在/res/xml 中建立一个xml文件此文件对appwidget进行配置.如下
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="1dp"
android:minHeight="1dp"
android:updatePeriodMillis="4000000"
android:initialLayout="@layout/appwidgetlayout">
<!-- 从上到下
宽
高
更新毫秒数
appwidget的初始化的布局 引用 res/layout 中的布局
-->
</appwidget-provider>
3.实现一个类继承 AppWidgetProvider
public class AppWeigetTest extends AppWidgetProvider {
private static final String in="joker.broadcast.appwedget";
//当到达指定的更新时间之后,或用户添加窗口小部件时触发
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
//当用户删除窗体部件时触发
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
}
//当所有船体部件删除时触发
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
}
//接收到广播的时候触发,以上几个方法是使用这个方法转发的,也就是说其实窗口的各种"事件" 都是使用广播的形式发出的
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
}
}
4.在AndroidManifest.xml
<receiver android:name=".AppWeigetTest">
<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>
以上 intent-filter 和 meta-data是系统设置不变的,其中meta-data 的resource 下的文件是 appwidget的配置文件
二, Appwidget中常用类的使用:
1.PendingIntent
此类是包装Intent类的 使Intent 在特定的事件触发
PendingIntent包装Intent意图 初始化方法有:getActivity getBroadcast getService
//参1 上下文对象 参数3 Intent对象
PendingIntent pending=PendingIntent.getActivity(context, 0, inten, 0);
2.RemoteViews
此类可以对:"小部件" 上的控件进行操作(比如改变TextView上的文字ImageView上的图片操作,改变图片添加事件)
RemoteViews remote=new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout);
//为窗口小部件上的控件添加点击事件
//参数一: 指定窗口小部件上的控件ID
//参数2 :指定触发事件后执行的Intent 的PendingIntent
remote.setOnClickPendingIntent(R.id.button1, pending); //像button1添加一个点击事件
3 AppWidgetManager
在onXXX事件中做为参数传递进来的,此类的对象负责更新Appwidget
AppWidgetManager manager=AppWidgetManager.getInstance(context);
ComponentName name=new ComponentName(context, AppWeigetTest.class);//代表AppWeiget控件
//以上两个步骤是在没有appwidgetmanager对象的时候,比如在onReceive方法里如何使用
manager.updateAppWidget(name, remoteViews); //此方法更新appwidget并且执行remoteViews只有执行这个方法后remoteViews配置的信息才会生效