Android Widget 初步学习(二)

本文详细介绍了如何从零开始创建一个Widget应用程序。包括创建继承自AppWidgetProvider的类、配置清单文件、编写Provider文件以及实现界面布局等内容。通过示例代码演示了如何在Widget中实时更新时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记得上次 初步的学到点只是,有个轮廓的概念,极其模糊的一些方法 周期介绍,今天来学习下wdiget程序

Widget 开发

1. 创建一个类,让其继承AppWidgetProvider,此类中有onDelete(context,int[] ),onEnable(context)方法等,一般的时候我们只要重写onUpdate(context ,AppWidgetManager , int[])这个方法就可以了,这个方法是当触发器更新Widget的时候被调用的,同时是被执行的操作

2, 在清单文件Manifest文件中添加一个<receiver>标签,用于指向前面创建的AppWidgetProvider子类

  1. <receiver android:name="widget"
  2. android:label="@string/app_name"
  3. android:icon="@drawable/icon">
  4. <intent-filter>
  5. <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  6. </intent-filter>
  7. <meta-data android:name="android.appwidget.provider"
  8. android:resource="@xml/widget_setting" />
  9. </receiver>

intent-filter中过滤了APPWIDGET_UPDATE事件,这个事件是由系统触发的更新事件,每个widget必须包含这个事件;meta-data标签描述的是widget的配置文件指向,该文件描述了widget的一些基本信息。

3 ,编写Widget的Provider 文件信息,

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <appwidget-provider
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:minWidth="100dp"
  5. android:minHeight="100dp"
  6. android:initialLayout="@layout/main"
  7. android:updatePeriodMillis="1000" >
  8. </appwidget-provider>minWidth和minHeight是widget的最小宽度和高度,这个值是一个参考值,系统会根据实际情况进行改变,initialLayout属性指明了widget的视图布局文件,updatePeriodMillis属性是widget每隔多久更新一次的时间,单位为毫秒。

(4)接下来就是界面布局,在这个示例中只需要一个TextView控件就可以,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/hello" android:id="@+id/text"/>
  11. </LinearLayout>

准备工作完毕,接下来完善继承自AppWidgetProvider的自定义类,重写onUpdate(Context, AppWidgetManager,int[])函数,代码如下:

  1. package com.dt.time;
  2. import java.util.Date;
  3. import android.appwidget.AppWidgetManager;
  4. import android.appwidget.AppWidgetProvider;
  5. import android.content.Context;
  6. import android.widget.RemoteViews;
  7. public class widget extends AppWidgetProvider {
  8. @Override
  9. public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
  10. // TODO Auto-generated method stub
  11. super.onUpdate(context, appWidgetManager, appWidgetIds);
  12. //1. 获取当前时间
  13. Date now = new Date();
  14. String strNow = now.toLocaleString();
  15. //2. 获取RemoteViews对象
  16. RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
  17. //3. 显示时间到widget
  18. views.setTextViewText(R.id.text, strNow);
  19. //4. 更新widget
  20. appWidgetManager.updateAppWidget(appWidgetIds, views);
  21. }
  22. }
  23. 之后运行写好的widget查看下成果,widget的启动与普通程序不同,它不会在程序列表中显示,而是要长按桌面在弹出的列表中选择Widgets项目,之后选择本示例time

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值