随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

所谓桌面小控件,就是指能直接显示在Android系统桌面的小程序,比如模拟时钟等。桌面小控件是通过Broadcast的形式来进行控制的,每个桌面小控件都对应一个BroadcastReceiver。Android提供了一个AppWidgetProvider类,它是BroadcastReceiver的子类,开发者只要开发一个继承AppWidgetProvider的子类,并重写其不同状态的生命周期方法即可。AppWidgetProvider提供如下四个不同的生命周期方法:

onUpdate:负责更新桌面控件的方法;实现桌面控件通常会考虑重写该方法。

onDeleted:当一个或多个桌面小控件被删除时回调该方法。

onEnabled:当接收到ACTION_APPWIDGET_ENABLED 广播时回调该方法。

onDisabled:当接收到ACTION_APPWIDGET_DISABLED广播时回调该方法。

开发桌面小控件步骤:

1、创建一个RemoteViews对象,创建该对象时可以指定加载指定的界面布局文件。

2、如果需要改变上一步所加载的界面布局文件的内容,可通过RemoteViews对象进行修改。一般来说,界面中主要包含ImageView和TextView两种组件。

3、创建一个ComponentName对象。

4、调用AppWidgetManager的updateAppWidget方法更新桌面小控件。

下面以开发数字时钟为例(代码原型来源疯狂讲义):

AppWidgetProvider子类:

package com.home;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.RemoteViews;public class DigitClock extends AppWidgetProvider {private Timer timer = new Timer();private AppWidgetManager appWidgetManager;private Context context;// 将0~9的液晶数字图片定义成数组private int[] digits = new int[] { R.drawable.image0, R.drawable.image1,R.drawable.image2, R.drawable.image3, R.drawable.image4,R.drawable.image5, R.drawable.image6, R.drawable.image7,R.drawable.image8, R.drawable.image9 };// 将显示小时、分钟、秒钟的ImageView定义成数组private int[] digitViews = new int[] { R.id.digit_image1,R.id.digit_image2, R.id.digit_image3, R.id.digit_image4,R.id.digit_image5, R.id.digit_image6 };@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {this.appWidgetManager = appWidgetManager;this.context = context;// 定义计时器timer = new Timer();// 启动周期性调度timer.schedule(new TimerTask() {@Overridepublic void run() {// 发送空消息,通知界面更新handler.sendEmptyMessage(0x123);}}, 0, 1000);}private Handler handler = new Handler() {public void handleMessage(Message msg) {if (msg.what == 0x123) {RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.digit);// 定义SimpleDateFormat对象SimpleDateFormat df = new SimpleDateFormat("HHmmss");// 将当前时间格式化成HHmmss的形式String timeStr = df.format(new Date());for (int i = 0; i < timeStr.length(); i++) {// 将第i个数字字符转换成对应的数字int num = timeStr.charAt(i) - 48;// 将第i个图片设为对应的液晶数字图片views.setImageViewResource(digitViews[i], digits[num]);}// 将AppWidgetProvider子类实例包装成ComponentName对象ComponentName componentName = new ComponentName(context,DigitClock.class);// 调用AppWidgetManager将remoteViews添加到ComponentName中appWidgetManager.updateAppWidget(componentName, views);super.handleMessage(msg);}}};
}

布局文件(digit.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><ImageViewandroid:id="@+id/digit_image1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image2"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:src="@drawable/image" /><ImageViewandroid:id="@+id/digit_image3"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image4"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:src="@drawable/image" /><ImageViewandroid:id="@+id/digit_image5"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image6"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

配置receiver:

<receiverandroid:name="com.home.DigitClock"android:label="@string/app_name" ><!-- 将该BroadcastReceiver当成桌面下控件 --><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><!-- 指定桌面小控件的meta-data --><meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/appwidget_provider" /></receiver>

appwidget_provide.xml:

<?xml version="1.0" encoding="utf-8"?>
<!--
指定该桌面组件的基本配置信息:minWidth:桌面小控件的最小宽度minHeight:桌面小控件的最小高度updatePeriodMillis:更新频率
initialLayout:初始时显示的布局
-->
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialLayout="@layout/digit"android:minHeight="70dp"android:minWidth="150dp"android:updatePeriodMillis="1000" />

开发数字时钟桌面小控件相关推荐

  1. Android之RemoteViews篇上————通知栏和桌面小控件

    Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...

  2. linux桌面显示温度,请问ubuntu下有没有什么桌面小控件现实显卡温度cpu使用率之类的...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 检测电脑中的传感器芯片: sudo sensors-detect 一路回车.执行完后会列出几个模块,将它们添加进启动模块里(我这里是下面2个). sudo ...

  3. android桌面时钟小控件开发记录

    所谓桌面小控件,就是能之间显示在Android系统桌面的小程序. 桌面小控件的实现是基于Broadcast的形式实现的,因此,每一个桌面小控件都对应于一个BroadcastReceiver类.Andr ...

  4. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  5. mac下dashboard小控件开发实例(附源码)

    1.背景          用mac的用户都应该知道,mac有一个很好的功能,就是dashboard小控件的功能,按下F12键就可以自由切换.博主最近在背GRE单词,就尝试这开发了一个背单词的dash ...

  6. 如何在Android实现桌面清理内存简单Widget小控件

    如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  7. visual studio开发工具的C#主流控件属性一览表

    visual studio开发工具的C#主流控件属性一览表 visual studio开发工具的C#主流控件属性一览表 详细的介绍了各控制属性的详细中文介绍 C#控件及常用设计整理 1.窗体  1.常 ...

  8. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  9. OS X开发:NSProgressIndicator进度指示器控件

    2019独角兽企业重金招聘Python工程师标准>>> OS X开发:NSProgressIndicator进度指示器控件 NSProgressIndicator是OS X平台上的活 ...

最新文章

  1. 近期活动盘点:​年末必学课程《社会网络分析》
  2. ruby中DBI连接MySQL数据库步骤详解
  3. ES6-14 Unicode表示法、字符串方法、模板字符串
  4. 弄断过河电缆_你说的是:剪断电缆线
  5. 使用CImage绘制半透明图片
  6. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
  7. 配置HistoryServer
  8. XP SP3多数功能借鉴Vista 安装将无需密码
  9. InVest模型的安装及应用说明
  10. 基于ricequant的lstm时间序列股价预测(pytorch)
  11. 【渝粤题库】陕西师范大学200091 东方文学专题研究 作业
  12. java 面试 英语自我介绍
  13. 百度地图迁徙大数据_百度地图迁徙大数据:复工后北上广深城内出行年后首次大幅增长...
  14. 2022身份识别技术大会 | 安全证件 | 可信身份认证 | 生物识别 | 公共安全安防身份技术展览会
  15. Qt编写的SMTP客户端(库)
  16. linux程序设计学习心得,几点学习Linux编程的建议
  17. java视频教程,Java面试资料
  18. 词云可视化——四行代码轻松上手
  19. 华为模拟器三个路由器全网互通
  20. 多张图片转成PDF文件

热门文章

  1. new String 详解
  2. Outlook邮箱附件无法打开的解决办法
  3. Visifire图表
  4. Aircrack-ng之Airodump-ng命令
  5. 苹果笔记本装win7后经常死机怎么办?
  6. 微信小程序项目实例SSM项目源代码会议预约管理+后台
  7. 计算机大赛英语,计算机应用大赛英语课件Unit8.ppt
  8. 南昌大学计算机接收调剂的条件,南昌大学211高校,接受调剂人数超过600人,涉及26个学院...
  9. Android开发:禁用应用分屏和屏幕旋转功能
  10. 运维常见软件工具注册码或序列号记录