`
seara
  • 浏览: 648622 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

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

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文件,代码如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"android:layout_width="fill_parent"
android:layout_height
="fill_parent">
<TextViewandroid: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类的子类,该类的代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packagenet.blogjava.nokiaguy.appwidget;

importjava.util.Date;
importandroid.appwidget.AppWidgetManager;
importandroid.appwidget.AppWidgetProvider;
importandroid.content.Context;
importandroid.widget.RemoteViews;

publicclassMyAppWidgetProviderextendsAppWidgetProvider
{
publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,
int[]appWidgetIds)
{
finalintN=appWidgetIds.length;
for(inti=0;i<N;i++)
{
intappWidgetId=appWidgetIds[i];
RemoteViewsviews
=newRemoteViews(context.getPackageName(),
R.layout.firstappwidget);
java.text.DateFormatdf
=newjava.text.SimpleDateFormat("hh:mm:ss");
views.setTextViewText(R.id.tvMsg,
"当前时间:"+df.format(newDate()));
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,并输入如下的代码:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xmlversion="1.0"encoding="utf-8"?>

<appwidget-providerxmlns: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文件的配置代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package
="net.blogjava.nokiaguy.appwidget"android:versionCode="1"android:versionName="1.0">
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<receiverandroid:name=".MyAppWidgetProvider">
<meta-dataandroid:name="android.appwidget.provider"
android:resource
="@xml/appwidget_provider"/>
<intent-filter>
<actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
</receiver>
</application>
<uses-sdkandroid:minSdkVersion="3"/>
</manifest>

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

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



国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    AppWidget窗口小部件

    在AppWidgetDemo这个示例项目中,开发者可能已经实现了一个基础的AppWidget,包括创建AppWidgetProvider类、定义布局文件、配置AppWidgetInfo以及可能的更新和事件处理逻辑。通过查看源代码和调试,我们可以学习如何...

    Android代码-Android小部件AppWidget.rar

    在"Android小部件AppWidget"这个项目中,你可能会找到一个实现了上述功能的完整示例,包括源代码、布局文件以及必要的配置文件。"JavaApk源码说明.txt"可能是对源码的解释,而"点这里查看更多优质源码~.url"则可能是...

    Android应用源码之Android小部件AppWidget.zip

    这个压缩包“Android应用源码之Android小部件AppWidget.zip”包含了一个用于展示如何创建和实现Android小部件的源代码示例。 在Android开发中,AppWidget是桌面小插件,它并不像普通的应用程序那样通过用户点击图标...

    Android小部件AppWidget

    Android小部件AppWidget是Android操作系统中的一个重要特性,它允许用户在主屏幕上放置应用程序的轻量级视图,提供快速访问或交互的功能。AppWidget并非完整的应用程序,而是应用程序的一个部分,通常展示简化的UI和...

    桌面小部件AppWidget的使用

    在Android系统中,AppWidget是桌面小部件的实现方式,它允许开发者创建可以在用户主屏幕上显示的小应用程序。这些小部件可以提供快速访问某些功能或显示实时信息,无需打开完整的应用程序。本篇将深入探讨如何使用...

    Android高级应用源码-Android小部件AppWidget.zip

    这个“Android高级应用源码-Android小部件AppWidget.zip”包含了一个关于如何创建和实现这类小部件的示例项目。通过深入研究这个源码,我们可以学习到以下关键知识点: 1. **AppWidgetProvider**: 这是Android中...

    android之appwidget(一)简单appwidget

    在Android平台上,AppWidget是系统桌面的一个组成部分,它允许开发者创建小型、静态或动态的应用程序组件,用户可以直接在主屏幕上与这些组件互动,无需打开完整的应用程序。本篇将深入探讨如何开发一个简单的App...

    实现android小窗口部件

    本教程将引导你实现一个Android小窗口部件,特别是一个时钟部件,这对于熟悉Android开发和提高用户体验至关重要。 首先,我们需要创建一个新的Android项目,并确保在`AndroidManifest.xml`文件中声明支持App Widget...

    安卓Android源码——安卓Android小部件AppWidget.rar

    在安卓平台上,AppWidget是Android系统提供的一种轻量级组件,允许开发者在用户的主屏幕上创建交互式的迷你应用程序,也就是我们通常所说的桌面小部件。这个压缩包"安卓Android源码——安卓Android小部件AppWidget....

    Android应用源码之Android小部件AppWidget-IT计算机-毕业设计.zip

    在Android平台上,AppWidget是Android小部件,它们是桌面组件,允许用户在主屏幕上与应用程序进行交互,而无需实际打开应用程序。本项目是针对Android应用源码的学习与毕业设计,旨在帮助开发者理解如何创建和集成...

    Android小部件AppWidget.zip

    这个“Android小部件AppWidget.zip”压缩包似乎包含了一个关于如何创建和实现Android AppWidget的源码示例。下面将详细解释相关知识点。 1. **AppWidget的基本概念**: - AppWidget是Android系统提供的一种轻量级...

    Android中实现Launcher功能之二 ----- 添加窗口小部件以及AppWidget的创建详解.pdf

    在Android系统中,窗口小部件(AppWidget)是一种能够让用户在Home屏幕上获取应用信息和快捷操作的小部件,它也是实现Launcher功能的一部分。创建AppWidget主要涉及以下几个关键组件和概念: #### 1. ...

    android app widget小部件

    在这个名为"AppWidget-master"的压缩包中,我们很可能是得到了一个示例项目,用于演示如何创建一个能够显示列表并支持刷新功能的Android App Widget。 首先,我们需要理解App Widget的基本架构。App Widget由XML...

    Android开发窗口小部件 - 显示时间

    "Android开发窗口小部件 - 显示时间"这个主题聚焦于如何创建一个能够实时显示当前时间的桌面小部件。这个小部件不仅能够装饰用户的主屏幕,还能够为用户提供便利,无需打开应用就能查看时间。 开发Android窗口小...

    appwidget时间每秒刷新一次

    创建一个`Handler`实例,并在其`postDelayed()`方法中设置一个Runnable,这个Runnable负责更新小部件的时间显示。为了每秒更新,Runnable需要在执行后重新提交自身,形成一个无限循环。 代码示例: ```java public...

    Android小部件AppWidget-IT计算机-毕业设计.zip

    【Android小部件AppWidget】是Android操作系统中的一种特殊组件,它允许用户在主屏幕上放置小型的应用程序界面元素,提供快捷的操作或显示实时信息。在Android应用开发中,AppWidget是扩展应用程序功能的一种方式,...

    安卓Widget小组件相关-Android小部件AppWidget.rar

    它是由Android SDK提供的一个类,用于创建可以在主屏幕或者其他支持Widget的应用中显示的小型应用程序视图。AppWidget的使用通常包括以下几个关键步骤: 1. **定义AppWidget提供者(AppWidgetProvider)**:...

Global site tag (gtag.js) - Google Analytics