Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!
2016-02-19 23:40
956 查看
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 Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!
- android自定义控件波纹ripple效果
- Android Studio 学习笔记01
- 解决maven管理Android项目时pom报错Unknown packaging: apk
- Android 的性能工具用法 III-Traceview
- Android 异常 Didn't find class .... on path: DexPathList[[z
- 模仿QQ快速显示图片效果
- [Android Pro] Android 官方推荐 : DialogFragment 创建对话框
- ViewPager与PagerAdapter深度解析
- Android Handler内存泄露分析
- Android Studio的使用
- Android中的Service使用
- Android Studio中的EditText控件使用详解
- android 音乐播放bug
- Android本地数据安全尝试(上)——SQLCipher
- [Android] Android5.1系统自带的应用启动次数统计
- Android Studio apk 打包流程
- android自定义ListPreference字体大小
- android小问题-------------SimpleCursorAdapter使用时的问题。 java.lang.IllegalArgumentException: column '_id' d
- android 自定义对话框