桌面小部件一般用于图库、音乐播放器、天气预报、日历、时钟等。尤其系统应用,其实可以长按手机桌面,底部会出现“桌面小工具”的图标,点击即可查看当前设备上的所有桌面小部件。那如何在自己的应用上实现小部件的功能呢?以下就从一个简单的demo介绍:
一、appwidgetprovider的使用:
public class appwidgetprovider extends broadcastReceiver {......}
查看源码可知,appwidgetprovider本身是一个广播接收者。
实现步骤:一些注意事项在代码中都有注释。
1、自定义一个Taskappwidgetprovider,继承自appwidgetprovider ;1 public class Taskappwidgetprovider extends appwidgetprovider { 2 3 // appwidgetprovider:继承了broadcastReceiver 4 5 private final String TAG="Taskappwidgetprovider"; 6 private final String UPDATE_Widget_ACTION = "androID.appWidget.action.APPWidget_UPDATE"; 7 8 @OverrIDe 9 public voID onReceive(Context context, Intent intent) {10 // Todo auto-generated method stub11 super.onReceive(context, intent);12 Log.i(TAG, "onReceive() " + intent.getAction());13 }14 15 16 @OverrIDe17 public voID onUpdate(Context context, AppWidgetManager appWidgetManager,18 int[] appWidgetIDs) {19 // Todo auto-generated method stub20 super.onUpdate(context, appWidgetManager, appWidgetIDs);21 Log.i(TAG, "onUpdate() appWidgetIDs.length: " + (appWidgetIDs!=null?appWidgetIDs.length:0));22 23 initWidget(context, appWidgetIDs);24 25 }26 27 //初始化界面28 private voID initWidget(Context context, int[] appWidgetIDs){29 RemoteVIEws vIEws = new RemoteVIEws(context.getPackagename(), R.layout.task_appWidget);30 vIEws.setTextVIEwText(R.ID.change_text, "onUpdate中修改文本-");31 initListener(context, vIEws);32 33 update(context, appWidgetIDs, vIEws); //通知系统更新Widget---否则,对界面的修改及设置的监听事件等均无效34 }35 //设置控件的点击事件36 private voID initListener(Context context,RemoteVIEws vIEws){37 Intent intent;38 PendingIntent pendingIntent;39 40 intent = new Intent(context, MainActivity.class);41 pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);42 vIEws.setonClickPendingIntent(R.ID.main_btn, pendingIntent);43 44 intent = new Intent(context, SearchActivity.class);45 pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);46 vIEws.setonClickPendingIntent(R.ID.search_btn, pendingIntent);47 }48 49 /**50 * 更新Widget51 * @param context52 * @param appWidgetIDs 当前桌面该应用部件的实例个数,简单理解:即在桌面添加了几个该部件53 * @param vIEws54 */55 private voID update(Context context,int[] appWidgetIDs, RemoteVIEws vIEws){56 AppWidgetManager WidgetMng = AppWidgetManager.getInstance(context);57 if(appWidgetIDs != null){58 WidgetMng.updateAppWidget(appWidgetIDs, vIEws);59 }else{60 WidgetMng.updateAppWidget(new Componentname(context, getClass()), vIEws);61 }62 }63 64 }2、在AndroIDManifest.xml中注册,不同的是,此处要指定在桌面小部件列表中显示的布局;
<receiver androID:name="com.test.appWidget.Taskappwidgetprovider" androID:label="@string/Widget_Title" > <intent-filter> <action androID:name="androID.appWidget.action.APPWidget_UPDATE" /> <!-- 在添加小部件时,androID系统发出的广播 与下面的Meta-data都是必须的,否则在小部件列表中不会显示 --> </intent-filter> <Meta-data androID:name="androID.appWidget.provIDer" androID:resource="@xml/task_Widget_info" /> <!-- name:必需是此名称 resource:在窗口小部件列表中显示的布局 --> </receiver>3、定义xml文件<appWidget-provIDer/>,里面是关于小部件的配置信息及具体显示布局;
//task_Widget_info.xml<?xml version="1.0" enCoding="UTF-8"?><appWidget-provIDer xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:initialLayout="@layout/task_appWidget" androID:minHeight="150dip" androID:minWIDth="200dip" androID:prevIEwImage="@drawable/local_search" androID:updatePeriodMillis="86400" ></appWidget-provIDer>
androID:initialLayout是具体显示布局:task_appWidget.xml
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:layout_gravity="center_horizontal" androID:background="#afffffff" androID:padding="10dp" > <linearLayout androID:ID="@+ID/linear_layout" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:orIEntation="vertical" > <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="测试窗口小部件" androID:textcolor="#000" androID:textSize="20sp" /> <TextVIEw androID:ID="@+ID/change_text" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="change-text" androID:textcolor="#000" androID:textSize="18sp" /> </linearLayout> <button androID:layout_below="@ID/linear_layout" androID:ID="@+ID/main_btn" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margintop="10dp" androID:text="click-main" /> <button androID:ID="@+ID/search_btn" androID:layout_toRightOf="@ID/main_btn" androID:layout_marginleft="10dp" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignBottom="@ID/main_btn" androID:text="click-search" /></relativeLayout>VIEw Code
上述完成后,运行程序;在手机桌面长按,观察在桌面小工具中是否存在,若存在则说明成功!
二、参考:
原文参考:http://www.cnblogs.com/TerryBlog/archive/2010/07/29/1788319.html
总结
以上是内存溢出为你收集整理的Android中桌面小部件AppWidget的使用全部内容,希望文章能够帮你解决Android中桌面小部件AppWidget的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)