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>
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配置的信息才会生效