实现一个用于显示当前时间的Google Android 窗口小部件(AppWidge

本文为原创,如需转载,请注明作者和出处,谢谢!

    Android不用我多说了,这是Google在2007年推出的一款主要用于移动设备的操作系统。google在android sdk1.5中加入了appwidget api。通过这项技术,可以在android手机的主界面(Home界面)显示可以拖动的窗口,用于显示各种用户需要的信息。至于显示什么,就完全依靠开 发人员的想象力了。OK,废话少说。我们先来体验一下如何开发一个显示当前时间的appwidget。这个appwidget每秒刷新一次,显示时、分和 秒。这个appwidget的效果如图1所示。

图1

    图1上方“当前时间:03:34:34”就是我们要实现的appwidget。这个appwidget是可以拖动的。如果在真机或android模拟器中这个时间是变化的。
    我们可按如下四步来实现这个appwidget:

步骤1:实现appwidget的layout

    在android上编程的人都知道,android的界面离不开layout,appwidget也不例外。建立appwidget layout的方式与建立其他layout的方式相同。在res/layout目录中建立一个firstappwidget.xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:id="@+id/tvMsg" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:textSize="20dp" 
        android:textColor="#F00" />
</LinearLayout>

    tvMsg用于显示applwidget中的文字,也就是类似“当前时间:03:34:34”的字符串。

步骤2:编写AppWidgetProvider类

    appwidget需要一个AppWidgetProvider类的子类,该类的代码如下:

package net.blogjava.nokiaguy.appwidget;

import java.util.Date;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.widget.RemoteViews;

public class MyAppWidgetProvider extends AppWidgetProvider
{
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds)
    {
        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++)
        {
            int appWidgetId = appWidgetIds[i];
            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.layout.firstappwidget);    
            java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss");
            views.setTextViewText(R.id.tvMsg, "当前时间:" + df.format(new Date()));            
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }        
    }
}

    当创建每一个appwidget的实例时AppWidgetManager都会调用该appwidget的onUpdate方法。要想使更新有效,必须调用updateAppWidget方法更新相应的appwidget中的view。

步骤3:配置<appwidget-provider>元素

    appwidget还需要一个<appwidget-provider>元素来描述appwidget的大小、布局、更新频率等信息。在 res目录下建立一个xml目录,在res/xml目录下建立一个appwidget_provider.xml,并输入如下的代码:

<?xml version="1.0" encoding="utf-8"?>

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="200dp"
    android:minHeight="30dp"
    android:updatePeriodMillis="1000"
    android:initialLayout="@layout/firstappwidget"/>

     其中android:minWidth和android:minHeight表示appwidget的最小宽度和高 度,android:updatePeriodMillis表示更新频率,单位是毫秒。也就是说,AppWidgetManager每秒都会调用该 appwidget的onUpdate方法。因此,onUpdate方法在两种情况下被调用,第一种是添加appwidget时,第二种是每一个更新周期 结束时调用一次onUpdate方法。

步骤4:进行最后的配置

    appwidget需要在appwidget_provider.xml文件中配置receiver,从这一点可以看出,android是通过 Broadcast来通知每一个appwidget的。appwidget_provider.xml文件的配置代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.blogjava.nokiaguy.appwidget" android:versionCode="1" android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <receiver android:name=".MyAppWidgetProvider">
            <meta-data android:name="android.appwidget.provider"
                    android:resource="@xml/appwidget_provider" />
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

    在上面的配置代码中使用<intent-filter>元素的<action>子元素来指定appwidget接收的动作。使用<meta-data>元素指定appwidget的layout。

    将这个程序安装在android模拟器中,我们会发现appwidget并没有出现。实际上,appwidget需要手工去添加。通过模拟器的menu, 进入“添加”列表,选择“widgets”,我们就会找到本文实现的appwidget,名称为“显示当前时间”。如图2所示。

 

图2

    当然,只要Home页有地方,我们也可以添加多个appwidget,如图3所示。

 

图3

 

时间: 2024-10-05 06:32:41

实现一个用于显示当前时间的Google Android 窗口小部件(AppWidge的相关文章

实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)

本文为原创,如需转载,请注明作者和出处,谢谢!     Android不用我多说了,这是Google在2007年推出的一款主要用于移动设备的操作系统.google在android sdk1.5中加入了appwidget api.通过这项技术,可以在android手机的主界面(Home界面)显示可以拖动的窗口,用于显示各种用户需要的信息.至于显示什么,就完全依靠开发人员的想象力了.OK,废话少说.我们先来体验一下如何开发一个显示当前时间的appwidget.这个appwidget每秒刷新一次,显示

google地图-如何实现一个能够显示带有经纬度信息的地图的程序

问题描述 如何实现一个能够显示带有经纬度信息的地图的程序 我的意思是这样的: 本地实现一个UI,在窗口中显示某一个特定区域带有经纬度坐标的地图(如下图),然后当鼠标移动到地图中时能实时的显示当前鼠标所指向的经纬度信息.还要求能在地图中根据所给经纬度进行连线(划线)工作. 实现这样的功能一般用什么工具呢? 能使用google earth吗? 解决方案 不知道 你要用什么编程技术实现? 解决方案二: 如果只有这一张图:某一个特定区域带有经纬度坐标的地图,可以考虑按区域统计好经纬度. 这样可以将图分成

javaerb-java web写了过滤器,作用显示一个servlet执行的时间,不过显示在哪里呢?

问题描述 java web写了过滤器,作用显示一个servlet执行的时间,不过显示在哪里呢? package exa; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TimerFilter implements Filter{ private FilterConfig config = null; public void init(FilterConfig config)

求一个空间能放置在窗口上用于显示excel文件

问题描述 求一个空间能放置在窗口上用于显示指定的excel文件. 解决方案 解决方案二:什么意思

bmp jpg-用mfc做一个图像浏览器,时间比较紧,又是新手,求要自学什么东西,能最快能做出来。

问题描述 用mfc做一个图像浏览器,时间比较紧,又是新手,求要自学什么东西,能最快能做出来. 做一个图像浏览器,可以打开bmp和jpg图像,并作简单的显示,学什么东西最快,需要掌握什么东西?求大神指教. 解决方案 这个简单,随便找本入门的书看看就可以.用向导生成一个sdi界面框架,只要重写下onopen,里面加上打开文件对话框获取文件名,在ondraw中用gdi画出图片在窗口里就可以了. 甚至,你还可以google一些现成的代码,这种程序大把. 解决方案二: 用cximage类绑定到pictur

一个用于Gnome桌面的下拉式终端: Guake 0.7.0 发布

一个用于Gnome桌面的下拉式终端: Guake 0.7.0 发布 Linux的命令行是最好.最强大的东西,它使新手着迷,并为老手和极客的提供极其强大的功能.那些在服务器和生产环境下工作的人早已认识到了这个事实.有趣的是,Linux终端是Linus Torvald在1991年写内核时实现的第一批功能之一. 终端是个强大的工具,由于它没有什么可调整的部分,所以十分可靠.终端介于控制台环境和GUI环境之间.终端自身作为一个GUI程序,运行在桌面环境下.有许多终端是适用于特定的桌面环境的,其它的则是通

《Android应用开发攻略》——2.12 为显示格式化时间和日期

2.12 为显示格式化时间和日期 Pratik Rupwal2.12.1 问题 你希望以不同的标准格式显示时间和日期.2.12.2 解决方案 DateFormat类提供API,用于以自定义格式表示时间和日期.这些API用起来毫不费力.2.12.3 讨论 例2-15添加了5个不同的TextView控件,用于显示不同格式的时间和日期. 例2-15:TextView布局 <?xml version="1.0" encoding="utf-8"?> <Li

新手-设计一个用于管理的人员类

问题描述 设计一个用于管理的人员类 设计一个用于人事管理的People(人员)类 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号).sex(性别).birthday(出生日期).id(身份证号)等.其中"出生日期"声明为一个"日期"类内嵌子对象.用成员函数实现对人员信息的录入和显示.要求包括:构造函数和析构函数.拷贝构造函数.内联成员函数.类的组合. 解决方案 http://blog.sina.com.cn/s/blog_718f727801

一个可以显示Linux命令运行进度的伟大工具

一个可以显示Linux命令运行进度的伟大工具 Coreutils Viewer(cv)是一个简单的程序,它可以用于显示任何核心组件命令(如:cp.mv.dd.tar.gzip.gunzip.cat.grep.fgrep.egrep.cut.sort.xz.exiting)的进度.它使用文件描述信息来确定一个命令的进度,比如cp命令.cv之美在于,它能够和其它Linux命令一起使用,比如你所知道的watch以及I/O重定向命令.这样,你就可以在脚本中使用,或者你能想到的所有方式,别让你的想象力束缚