widget

一个最简单的AppWidge例子


AppWidge组件是Android手机Home界面小应用程序,我们先来体验一下如何开发一个显示当前时间的appwidget。这个appwidget每秒刷新一次,显示时、分和 秒。这个appwidget的效果如图1所示。






步骤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/timeappwidget"/>

其中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文件的配置代码如下:

在<application>与</application>之间加入。

<receiver android:name="com.peidw.widget.TimeAppWidgetProvider">
<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>

在</manifest>节点前添加

<uses-sdk android:minSdkVersion="3" />

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

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

通过这这个例子,终于可以在我的程序中增加AppWidge功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值