Android开发教程之桌面组件【widget】初探PPT课件.pptx_第1页
Android开发教程之桌面组件【widget】初探PPT课件.pptx_第2页
Android开发教程之桌面组件【widget】初探PPT课件.pptx_第3页
Android开发教程之桌面组件【widget】初探PPT课件.pptx_第4页
Android开发教程之桌面组件【widget】初探PPT课件.pptx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android开发教程之桌面组件 widget 初探 AppWidget框架类在Android如何使用WidgetAppWidget框架的主要类介绍AppWidgetManger类继承自AppWidgetProvider可实现的方法DEMO讲解1 新建AppWidgetProvderInfo2 写一个类继承自AppWidgetProvider3 后台注册Receiver4 使AppWidget组件支持点击事件5 如何使TextView在两种文本间来回跳转 2020 3 25 1 1 AppWidgetProvider 继承自BroadcastRecevier 在AppWidget应用update enable disable和delete时接收通知 其中 onUpdate onReceive是最常用到的方法 它们接收更新通知 2 AppWidgetProvderInfo 描述AppWidget的大小 更新频率和初始界面等信息 以XML文件形式存在于应用的res xml 目录下 3 AppWidgetManger 负责管理AppWidget 向AppwidgetProvider发送通知 4 RemoteViews 一个可以在其他应用进程中运行的类 向AppWidgetProvider发送通知 1 AppWidget框架类 2020 3 25 2 1 长按主界面 2 之后弹出一个对话框 里面就有android内置的一些桌面组件 2 在Android如何使用Widget 2020 3 25 3 1 AppWidgetManger类 bindAppWidgetId intappWidgetId ComponentNameprovider 通过给定的ComponentName绑定appWidgetId getAppWidgetIds ComponentNameprovider 通过给定的ComponentName获取AppWidgetId getAppWidgetInfo intappWidgetId 通过AppWidgetId获取AppWidget信息 getInstalledProviders 返回一个List的信息 getInstance Contextcontext 3 AppWidget框架的主要类介绍 2020 3 25 4 获取AppWidgetManger实例使用的上下文对象 updateAppWidget int appWidgetIds RemoteViewsviews 通过appWidgetId对传进来的RemoteView进行修改 并重新刷新AppWidget组件 updateAppWidget ComponentNameprovider RemoteViewsviews 通过ComponentName对传进来的RemoeteView进行修改 并重新刷新AppWidget组件 updateAppWidget intappWidgetId RemoteViewsviews 通过appWidgetId对传进来的RemoteView进行修改 并重新刷新AppWidget组件 Android开发教程 2020 3 25 5 2 继承自AppWidgetProvider可实现的方法为如下 1 onDeleted Contextcontext int appWidgetIds 2 onDisabled Contextcontext 3 onEnabled Contextcontext 4 onReceive Contextcontext Intentintent Tip 因为AppWidgetProvider是继承自BroadcastReceiver所以可以重写onRecevie方法 当然必须在后台注册Receiver 5 onUpdate Contextcontext AppWidgetManagerappWidgetManager int appWidgetIds 2 继承自AppWidgetProvider可实现的方法 2020 3 25 6 下面是我今天做的一个实例 提供给大家练习时做参考 效果如下 在布局中放一个TextView做桌面组件 然后设置TextView的Clickable true 使其有点击的功能 然后我们点击它时改变它的字体 再点击时变回来 详细操作如下流程 1 新建AppWidgetProvderInfo 2 写一个类继承自AppWidgetProvider 3 后台注册Receiver 4 使AppWidget组件支持点击事件 5 如何使TextView在两种文本间来回跳转问题抛出来了 那么一起解决它吧 4 Demo讲解 2020 3 25 7 代码如下 Tip 上文说过AppWidgetProvderInfo是在res xml的文件形式存在的 看参数不难理解 比较重要的是这里android initialLayout layout main 此句为指定桌面组件的布局文件 1 新建AppWidgetProvderInfo 2020 3 25 8 主要代码如下 publicclasswidgetProviderextendsAppWidgetProvider并重写两个方法 OverridepublicvoidonUpdate Contextcontext AppWidgetManagerappWidgetManager int appWidgetIds OverridepublicvoidonReceive Contextcontext Intentintent Tip onUpdate为组件在桌面上生成时调用 并更新组件UI onReceiver为接收广播时调用更新UI 一般这两个方法是比较常用的 2 写一个类继承自AppWidgetProvider 2020 3 25 9 后台配置文件代码如下 3 后台注册Receiver 2020 3 25 10 Tip 因为是桌面组件 所以暂时不考虑使用Activity界面 当然你在实现做项目时可能会需要点击时跳转到Activity应用程序上做操作 典型的案例为Android提供的音乐播放器 上面代码中比较重要的是这一句大意为指定桌面应用程序的AppWidgetProvderInfo文件 使其可作其管理文件 Android开发教程 2020 3 25 11 先看代码 publicstaticvoidupdateAppWidget Contextcontext AppWidgetManagerappWidgeManger intappWidgetId rv newRemoteViews context getPackageName R layout main IntentintentClick newIntent CLICK NAME ACTION PendingIntentpendingIntent PendingIntent getBroadcast context 0 intentClick 0 rv setOnClickPendingIntent R id TextView01 pendingIntent appWidgeManger updateAppWidget appWidgetId rv 4 使AppWidget组件支持点击事件 2020 3 25 12 此方法为创建组件时onUpdate调用的更新UI的方法 代码中使用RemoteView找到组件的布局文件 同时为其设置广播接收器CLICK NAME ACTION并且通过RemoteView的setOnClickPendingIntent方法找到我想触发事件的TextView为其设置广播 接着 OverridepublicvoidonReceive Contextcontext Intentintent TODOAuto generatedmethodstubsuper onReceive context intent Android开发教程 2020 3 25 13 if rv null rv newRemoteViews context getPackageName R layout main if intent getAction equals CLICK NAME ACTION if uitil isChange rv setTextViewText R id TextView01 context getResources getString R string load else rv setTextViewText R id TextView01 context getResources getString R string change Android开发教程 2020 3 25 14 Toast makeText context Boolean toString uitil isChange Toast LENGTH LONG show uitil isChange uitil isChange AppWidgetManagerappWidgetManger AppWidgetManager getInstance context int appIds appWidgetManger getAppWidgetIds newComponentName context widgetProvider class appWidgetManger updateAppWidget appIds rv 在onReceiver中通过判断传进来的广播来触发动作 2020 3 25 15 如何TextView在来两种状态中来回呢 这也是我比较调试最久的一个难点 问题出在对AppWidget的理解不够深入 如果我的设想没错的话AppWidget的生命周期应该在每接收一次广播执行一次为一个生命周期结束 也就是说你在重写的AppWidgetProvider类里面声明全局变量做状态判断 每次状态改变AppWidgetProvider再接收第二次广播时即为你重新初始化也就是说桌件为你重新实例化了一次AppWidgetProvider 今天我因为在里面放了一个boolean值初始化为true 观察调试看到每次进入都为TRUE故你在设置桌面组件时 全局变量把它声明在另外一个实体类用来判断是没问题的 切忌放在本类 代码参考onReceiver方法 5 如何使TextView在两种文本间来回跳转 2020 3 25 16 代码 packagecom terry importandroid app PendingIntent importandroid appwidget AppWidgetManager importandroid appwidget AppWidgetProvider importandroid content ComponentName importandroid content Context importandroid content Intent importandroid widget RemoteViews importandroid widget Toast 2020 3 25 17 publicclasswidgetProviderextendsAppWidgetProvider privatestaticfinalStringCLICK NAME ACTION com terry action widget click privatestaticRemoteViewsrv OverridepublicvoidonUpdate Contextcontext AppWidgetManagerappWidgetManager int appWidgetIds TODOAuto generatedmethodstubfinalintN appWidgetIds length Android开发教程 2020 3 25 18 for inti 0 i N i intappWidgetId appWidgetIds updateAppWidget context appWidgetManager appWidgetId OverridepublicvoidonReceive Contextcontext Intentintent TODOAuto generatedmethodstubsuper onReceive context intent 2020 3 25 19 if rv null rv newRemoteViews context getPackageName R layout main if intent getAction equals CLICK NAME ACTION if uitil isChange rv setTextViewText R id TextView01 context getResources getString R string load Android开发教程 2020 3 25 20 else rv setTextViewText R id TextView01 context getResources getString R string change Toast makeText context Boolean toString uitil isChange Toast LENGTH LONG show uitil isChange uitil isChange Andro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论