Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!
16lz
2021-01-23
Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!
PS:学习自某网站(不打广告)
这个小组件相信大家都很熟悉吧,以前的墨迹天气的时候我也经常用,现在好像很少有软件用了,个人感觉吧…他对于一个用户而言来说是十分方便,快捷的,而且我们可以定制一些各种各样的开关等等等等….
我们新建一个工程——Widget
>
一.开发步骤
- 1.绘制Widget布局(比较局限性的View)
- 2.配置Widget的属性
- 3.自定义APPwidgetProvicer
- 4.提供Configuration Activity(配置Activity)
二.实现桌面时钟
需求:
- 1.实时更新时间
- 2.添加,删除
1.appwidget-provider
既然我们要使用它,我们就先在res目录下新建一个xml文件夹,然后再new一个appwidget-provider,再新建一个layout名叫widget_clock.xml等下我们调用
<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_clock" android:minHeight="40dp" android:minWidth="100dp" android:updatePeriodMillis="8640000" ></appwidget-provider>
再新建一个layout,名为widget_clock.xml就是我们widget小组件的布局了,因为我们只要一个时钟,所以,就只写个TextView就OK了,ID是tv_clock;
2.ClockProvider
主要是监听小组件的状态
package com.lgl.widget;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.content.Intent;/** * 时钟小组件的监听 * * @author lgl * */public class ClockProvider extends AppWidgetProvider { // 刷新的时候执行 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); } // 第一个添加到屏幕上 @Override public void onEnabled(Context context) { // TODO Auto-generated method stub super.onEnabled(context); // 启动Service context.startService(new Intent(context, ClockService.class)); } // 最后一个widget从屏幕移除 @Override public void onDisabled(Context context) { // TODO Auto-generated method stub super.onDisabled(context); context.stopService(new Intent(context, ClockService.class)); } // 从屏幕移除 @Override public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub super.onDeleted(context, appWidgetIds); }}
3.ClockService
当我们把小组件添加到我们的屏幕上的时候,我们就启动这个服务去更新时间
package com.lgl.widget;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.app.Service;import android.appwidget.AppWidgetManager;import android.content.ComponentName;import android.content.Intent;import android.os.IBinder;import android.widget.RemoteViews;/** * 更新小组件事件的服务 * * @author lgl * */public class ClockService extends Service { // 定时器 private Timer timer; // 日期格式 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); timer = new Timer(); /** * 参数:1.事件2.延时事件3.执行间隔事件 */ timer.schedule(new TimerTask() { @Override public void run() { updateView(); } }, 0, 1000); } /** * 更新事件的方法 */ private void updateView() { // 时间 String time = sdf.format(new Date()); /** * 参数:1.包名2.小组件布局 */ RemoteViews rViews = new RemoteViews(getPackageName(), R.layout.widget_clock); // 显示当前事件 rViews.setTextViewText(R.id.tv_clock, time); // 刷新 AppWidgetManager manager = AppWidgetManager .getInstance(getApplicationContext()); ComponentName cName = new ComponentName(getApplicationContext(), ClockProvider.class); manager.updateAppWidget(cName, rViews); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); timer = null; }}
我们的服务写好了之后我们就可以去监听了,当我们创建了小组件的时候就启动服务,当我们移除了小组件的时候就停止服务
// 第一个添加到屏幕上 @Override public void onEnabled(Context context) { // TODO Auto-generated method stub super.onEnabled(context); //启动Service context.startService(new Intent(context,ClockService.class)); } // 最后一个widget从屏幕移除 @Override public void onDisabled(Context context) { // TODO Auto-generated method stub super.onDisabled(context); context.stopService(new Intent(context,ClockService.class)); }
但是别忘了,我们还需要在AndroidMainifest.xml中注册一下
<receiver android:name="com.lgl.widget.ClockProvider" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widgetconfig" /> </receiver> <service android:name="com.lgl.widget.ClockService" > </service>
好了我们运行一下
Demo下载:http://download.csdn.net/detail/qq_26787115/9437254
更多相关文章
- Android新手入门实例之Android漂亮时钟的源代码
- Android中事件处理之TouchListener实现步骤
- android 时钟组件AnalogClock与Clock
- android之组件4
- android组件
- 【转】android常用组件
- android经常调用的组件
- Android四大组件Service之bindService启动
- Android 四大组件之再论BroadCast