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

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!     Android不用我多说了,这是Google在2007年推出的一款主要用于移动设备的操作系统。

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

    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

 

目录
相关文章
|
4月前
|
Android开发
Android Stadio Build 窗口字符串乱码问题
在使用Android Studio过程中,如果遇到Build窗口字符串乱码问题,可以通过编辑`studio.vmoptions`文件添加`-Dfile.encoding=UTF-8`配置并重启Android Studio来解决。
184 1
Android Stadio Build 窗口字符串乱码问题
|
7月前
|
Android开发
如何在Android真机上检测是否有Google Map add-on
如何在Android真机上检测是否有Google Map add-on
79 3
|
3月前
|
API Android开发 数据安全/隐私保护
Android经典实战之窗口和WindowManager
本文介绍了Android开发中“窗口”的基本概念及其重要性。窗口是承载用户界面的基础单位,而`WindowManager`系统服务则负责窗口的创建、更新和移除等操作。了解这些概念有助于开发复杂且用户体验良好的应用。
70 2
|
4月前
|
开发工具 Android开发
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
130 1
|
5月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
84 4
|
4月前
|
安全 Java Android开发
Android 14适配Google play截止时间临近,适配注意点和经验
本文介绍了Android 14带来的关键更新,包括性能优化、定制化体验、多语言支持、多媒体与图形增强等功能。此外,还强调了适配时的重要事项,如targetSdkVersion升级、前台服务类型声明、蓝牙权限变更等,以及安全性与用户体验方面的改进。开发者需按官方指南更新应用,以充分利用新特性并确保兼容性和安全性。
302 0
|
6月前
|
Android开发 开发者
Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。
【6月更文挑战第26天】Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。要更改主题,首先在该文件中创建新主题,如`MyAppTheme`,覆盖所需属性。然后,在`AndroidManifest.xml`中应用主题至应用或特定Activity。运行时切换主题可通过重新设置并重启Activity实现,或使用`setTheme`和`recreate()`方法。这允许开发者定制界面并与品牌指南匹配,或提供多主题选项。
94 6
|
6月前
|
Android开发 开发者
Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题
【6月更文挑战第25天】Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题,首先在`styles.xml`中定义新主题,如`MyAppTheme`,然后在`AndroidManifest.xml`中设置`android:theme`。可应用于全局或特定Activity。运行时切换主题需重置Activity,如通过`setTheme()`和`recreate()`方法。这允许开发者定制界面以匹配品牌或用户偏好。
61 2
|
6月前
|
Shell Go 开发工具
How to decompile Google Android .apk file as readable dump【原创】
How to decompile Google Android .apk file as readable dump【原创】
36 0
|
7月前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
下一篇
DataWorks