Android桌面小组件---Widget组件开发(什么是Widget)

1.什么是Weidget
Widget就是可以放在桌面上的组件,包括像天气、便签、日历、流量控制等等,都是Widget,点击进去,可以提供相应的功能;

2.Widget的特点
(1)可以自定义
(2)可以及时更新

3.Widget使用
(1)绘制Widget的布局:和其他应用类的APP不同的是,Widget支持的控件比较少:除了基本的布局之外(相对、线性、帧、网格),ImageView、ImageButton、TextView、Progressbar、Clock、ListView等类型的,其他的View控件都是不支持的;如果想要其他复杂的控件,需要修改FrameWork层的代码
(2)设置Widget的属性:设置宽度、高度、最大宽度和最小高度等;
(3)定义AppWidgetProvider:类似于广播,接收广播在此处做更新操作;
(4)提供Configuration Activity:提供配置Activity,来初始化我们的Widget

4.Widget的基本用法
在工程项目中创建一个App Widget文件,相应的生成了3个文件,我们来看一下这3个文件;
Android桌面小组件---Widget组件开发(什么是Widget)_第1张图片

(1)App Widget的布局文件
Android桌面小组件---Widget组件开发(什么是Widget)_第2张图片
在这个布局文件中,自动给我们的是一个TextView,我们也可以根据自己实现的功能,来添加相应的控件,但只能添加Widget支持的控件;
(2)设置Widget的属性文件
Android桌面小组件---Widget组件开发(什么是Widget)_第3张图片
第二个文件是Widget的属性文件,可以配置该Weidget的属性,像最小宽度(minWidth)、最小高度(minHeight)、实现的Widget布局(initialLayout)、以及刷新速率(updatePeriodMillis),其实设置这4个属性就足够了;

(3)定义AppWidgetProvider
Android桌面小组件---Widget组件开发(什么是Widget)_第4张图片
第三个文件就是自定义AppWidgetProvider,通过继承AppWidgetProvider实现;AppWidgetProvider是继承自BroadcastReceiver;
Android桌面小组件---Widget组件开发(什么是Widget)_第5张图片
在AppWidgetProvider中,有几个重要的方法:
Android桌面小组件---Widget组件开发(什么是Widget)_第6张图片
Android桌面小组件---Widget组件开发(什么是Widget)_第7张图片
Android桌面小组件---Widget组件开发(什么是Widget)_第8张图片
Android桌面小组件---Widget组件开发(什么是Widget)_第9张图片
5.做一个简单的时钟计数器
首先创建一个服务,在这个服务中,做计时操作,当第一个Widget被创建时,会调用onEnable()方法,绑定Service开始计时操作;

在onCreate方法中开启计时功能,对于Widget组件的刷新需要RemoteViews和AppWidgetManager,因此先创建一个RemoteViews对象;
Android桌面小组件---Widget组件开发(什么是Widget)_第10张图片
RemoteViews对象需要绑定Widget布局文件中的控件,在前面的内容中知道是TextView,并且填充要显示的内容(时间);
Android桌面小组件---Widget组件开发(什么是Widget)_第11张图片
绑定Widget布局中的控件之后,要通知AppWidgetProvider刷新,就是update操作;因此创建AppWidgetManager对象,通过AppWidgetManager对象执行updateAppWidget方法,其实就是进入到AppWidgetProvider的onUpdate方法中执行了刷新操作;
在这里插入图片描述
当Widget组件创建之后,会调用onEnabled方法,在这个方法中进行启动Service的操作,启动计时操作。
Android桌面小组件---Widget组件开发(什么是Widget)_第12张图片
所有的工作完成之后,不要忘记在清单文件中注册receiver和service。
Android桌面小组件---Widget组件开发(什么是Widget)_第13张图片
以上就是Widget组件开发的简单介绍,后续我会继续更新Widget开发相关的内容。

你可能感兴趣的:(Android桌面小组件---Widget组件开发(什么是Widget))