fei菲菲 发表于 2013-1-3 16:53:10

android widget 开发实例 : 桌面便签程序的实现详解和源码

<div id="cnblogs_post_body">使用android平台对widget开发的支持,桌面便签类软件是非常易于开发的。
本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法。

1.MyNote的最终实现效果
为了提起大家阅读本文的兴趣,先介绍一下最终实现的效果。

首先可以通过桌面增加我们的MyNote小部件,如下图所示:

http://pic002.cnblogs.com/images/2012/437620/2012092510434821.gif
图中的“我的便签”就是我们之后将要开发的便签程序。

点击后启动添加日志界面,如下图所示:

http://pic002.cnblogs.com/images/2012/437620/2012092510442395.gif


输入便签内容后,可以点击下面所列的四种图标之一作为便签图标。

比如点击第一个后,桌面上就会添加一个便签:

http://pic002.cnblogs.com/images/2012/437620/2012092510450061.gif

点击桌面上的便签,可以再次对便签内容进行修改,并更换图标。
桌面上可以同时存在多个便签,并可以分别进行修改。

如下图所示,我们将刚才创建的便签的图标修改一下,并新增了一个便签:

http://pic002.cnblogs.com/images/2012/437620/2012092510464173.gif


每个便签的内容都是分别独立保存的,可以随时点击桌面图标修改。

2.开发方式
开发的目的和追求的效果已经十分清楚了,首先我们确定一下开发方式。

在本文中,将采取一种渐进式的开发,也就是说不会一口气从头做到尾。

而是分为好几个阶段。每个阶段都完成一定的目标,然后下个阶段增加更多的功能,

每个阶段都离最终目标更进一步,OK,你可以说这是一次敏捷开发 :)


第一个阶段,首先我们会搭建一个widget原型程序,

它是完全可以运行的,可以创建桌面widget。


第二个阶段,我们改进 widget 配置Activity 部分的实现

使其具备创建便签的功能


第三个阶段,我们改进 widget 点击响应部分的实现,

使其具备修改便签的功能


3.搭建widget原型程序
本节我们会做一个最简单的widget程序原型,但是它是可以运行的。

一般来说 widget 程序由以下部分组成:

a. AppWidgetProvider 的实现

b. widget外观布局定义文件

c. 新增widget时的配置Activity的实现(可选)

d. widget 参数配置文件

以下分别讲解

a. AppWidgetProvider 的实现
首先我们新建一个android工程起名为MyNote,然后修改 MyNote.java 的代码,

使MyNote继承自 AppWidgetProvider ,并重写 onUpdate 和 onDeleted 方法。

其中onUpdate 会在widget创建及被更新时调用, onDeleted 会在widget被删除时调用。

目前我们不需要在这里实现任何功能,只是简单的记录日志以便我们观察其运行,编写好的代码如下:

<div class="cnblogs_Highlighter">package com.silenceburn;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.util.Log;public class MyNote extends AppWidgetProvider {      /** Called when the activity is first created. */                final String mPerfName = "com.silenceburn.MyColorNoteConf";      @Override      public void onUpdate(Context context, AppWidgetManager appWidgetManager,                        int[] appWidgetIds) {                // TODO Auto-generated method stub                final int N = appWidgetIds.length;                for (int i = 0; i < N; i++) {                        int appWidgetId = appWidgetIds;                        Log.i("myLog", "this is [" + appWidgetId + "] onUpdate!");                }      }      @Override      public void onDeleted(Context context, int[] appWidgetIds) {                // TODO Auto-generated method stub                final int N = appWidgetIds.length;                for (int i = 0; i < N; i++) {                        int appWidgetId = appWidgetIds;                        Log.i("myLog", "this is [" + appWidgetId + "] onDelete!");                }      }}
页: [1]
查看完整版本: android widget 开发实例 : 桌面便签程序的实现详解和源码