`
keeponmoving
  • 浏览: 112494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android的Widget编写实例

 
阅读更多

Android有个非常好的功能,就是Widget控件,Widget作为应用的快捷方式和缩略展示,它在桌面上可以展示用户感兴趣的应用程序提供的信息,并且可以点击widget上的控件从而进入到应用的Activity。那么怎么去开发一个Widget呢,可以说是非常的人性化和方便的。下面是我在学习中创建的一个小实例。

参照Google的文档,我们首先得在清单文件中declare一个widget,代码如下。

 

        <receiver android:name="ExampleAppWidgetProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/example_appwidget_info" />
        </receiver>

  下面我们要去写一个类ExampleAppWidgetProvider它要继承AppWidgetProvider,还有我们注意这行:android:resource="@xml/example_appwidget_info,example_appwidget_info.xml是用来描述控件的元数据。下面分别给出相应的代码。

example_appwidget_info.xml

 

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="0"
    android:initialLayout="@layout/example_appwidget"
    >
</appwidget-provider>

 ExampleAppWidgetProvider.java

 

package cn.itcast.widget;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;

public class ExampleAppWidgetProvider extends AppWidgetProvider {

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
		super.onUpdate(context, appWidgetManager, appWidgetIds);

		Log.i("i", "onUpdate()");

		RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
		Date date = new Date(System.currentTimeMillis());
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		String time = format.format(date);
		views.setTextViewText(R.id.tv_time, time);
		appWidgetManager.updateAppWidget(appWidgetIds[0], views);
	}

	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		super.onDeleted(context, appWidgetIds);
		Log.i("i", "onDeleted()");
	}

	@Override
	public void onEnabled(Context context) {
		super.onEnabled(context);
		Log.i("i", "onEnabled()");
		// 启动服务
		Intent intent = new Intent(context, UpdateTimeService.class);
		context.startService(intent);
	}

	@Override
	public void onDisabled(Context context) {
		super.onDisabled(context);
		Log.i("i", "onDisabled()");
		// 停止服务
		Intent intent = new Intent(context, UpdateTimeService.class);
		context.stopService(intent);
	}
}

如下XML文件是widget的布局文件,

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#fff">

    <TextView android:id="@+id/tv_time"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="我是widget"
        android:textColor="#f00"/>

</LinearLayout>

 下面这个类是一个service,它负责实时更新桌面上widget显示的时间,具体代码如下,

 

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.widget.RemoteViews;

public class UpdateTimeService extends Service {

	private Timer timer;
	private TimerTask task = new TimerTask() {

		@Override
		public void run() {
			// 得到widget管理器
			AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
			ComponentName componentName = new ComponentName(getApplicationContext(), ExampleAppWidgetProvider.class);
			RemoteViews views = new RemoteViews(getPackageName(), R.layout.example_appwidget);
			
			Date date = new Date(System.currentTimeMillis());
			SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			String time = formate.format(date);
			views.setTextViewText(R.id.tv_time, time);

			Intent intent = new Intent(getApplicationContext(), MainActivity.class);
			PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 100, intent, 0);
			// 设置widget的点击事件
			views.setOnClickPendingIntent(R.id.tv_time, pendingIntent);
			// 更新widget
			appWidgetManager.updateAppWidget(componentName, views);
		}
	};

	@Override
	public void onCreate() {
		super.onCreate();

		timer = new Timer();
		timer.schedule(task, 0, 1000);// 开始任务
	}

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		timer.cancel();// 结束任务
	}
}

清单文件中注册service,加上:

 

<service android:name=".UpdateTimeService"></service>
 

 

 

分享到:
评论

相关推荐

    android之appwidget(四)终 appwidget控件更新

    2. ** onUpdate() 方法**: 在这个方法中,开发者编写代码来创建并更新RemoteViews对象,该对象代表AppWidget在主屏幕上显示的内容。例如,你可以在这里更新TextView的文本,ImageView的图片,或者更改Button的状态等...

    android Launcher添加widget源码

    3. **编写Widget提供者**:这是一个继承自AppWidgetProvider的类,负责处理Widget的创建、更新和删除等事件。 4. **实现意图 Intent**:用于在Widget和接收器Activity之间传递信息,例如当用户点击Widget时触发特定...

    android app widget demo

    6. **AppWidgetManager**:管理所有Widget实例的系统服务。 在"appwidget"这个压缩包文件中,可能包含了示例代码和资源文件,供开发者学习如何实现上述功能。通过研究这些文件,你可以更好地理解App Widget的工作...

    android studio项目实例

    ### Android Studio项目实例详解 #### 一、环境准备与安装 在开始开发任何Android应用程序之前,首先需要确保已经安装了最新版本的Android Studio。如果尚未安装,请访问[Android Studio官网]...

    Android应用源码之android Widget小组件开发.zip

    本资源“Android应用源码之android Widget小组件开发”是一个针对Android Widget开发的学习资料,包含了完整的源代码实例,非常适合开发者深入理解和实践。 在Android中,Widget主要由AppWidgetProvider、...

    android widget入门教程

    Android小部件(Widgets)是Android操作系统提供的一种特性,允许开发者在用户的主屏幕上...在"widget.pptx"和"MyWidget"这两个文件中,你可能会找到更详细的步骤和示例代码,帮助你更好地理解和实现这个教程的内容。

    android开发实例大全_王东华

    实例007: 创建一个桌面组件Widget 11 实例008: 在屏幕中实现一个按钮效果 12 实例009: 在屏幕中显示文字 13 实例010: 在屏幕中显示编辑框 17 实例011: 在屏幕中显示复选框 18 实例012: 在屏幕中显示单选框 21 ...

    android安卓app开发之widget界面控件使用教程.zip

    实践是检验理论的最好方式,你可以参考《Widget开发:一个简单的例子》和《App Widget学习笔记》来动手编写自己的第一个 App Widget。通过实际操作,你会更加熟悉这个功能强大的桌面扩展机制,从而在你的应用程序中...

    Android实例开发完全手册

    - **具体实现:** 通过Eclipse新建一个Android项目,编写简单的代码。 - **特别提醒:** 处理模拟器运行缓慢导致的问题。 - **1.15 向Eclipse中导入Android程序** - **实例说明:** 将现有的Android项目导入...

    Widget - Demo

    总的来说,"Widget - Demo"是一个展示如何使用和交互Widget的实例,通过这个Demo,开发者和学习者可以了解到如何在应用程序中灵活地管理Widget,以满足用户的个性化需求,同时也可以掌握UI动态更新和布局管理的关键...

    Eclipse编写的Android数字时钟应用实例(用新建Runnable的方法)

    import android.widget.TextView; public class MainActivity extends Activity { private TextView clockView; private Runnable clockRunnable = new Runnable() { @Override public void run() { ...

    android studio实现简单考试应用程序实例代码详解

    "Android Studio实现简单考试应用程序实例代码详解" Android Studio是Google推出的一个集成开发环境(IDE),它提供了一个功能强大且灵活的开发环境,用于开发Android应用程序。在本文中,我们将介绍如何使用...

    android studio项目实例.docx

    ### Android Studio项目实例详解 #### 一、项目背景与意义 在移动互联网时代,Android操作系统因其开放性和灵活性而成为智能手机市场的主导力量之一。对于开发者而言,掌握如何使用Android Studio进行应用开发至关...

    Android开发实例大全.pdf

    ### Android开发实例大全知识点总结 #### 第一章 UI布局开发实例集锦 1. **线性布局LinearLayout**:用于按照水平或垂直方向线性排列控件,是布局中最基本的组件。 2. **相对布局RelativeLayout**:通过相对定位的...

    Android源码——Widget快捷拨号程序源码.zip

    在Android系统中,Widget是应用程序在主屏幕上的小型交互式组件,它们为用户提供了一种便捷的方式来访问和控制应用的功能,而“Widget快捷拨号程序”就是这类组件的一个实例。这个压缩包“Android源码——Widget快捷...

    Pro Android学习:list widget小例子

    在描述中提到的博客文章中,作者可能详细讲解了如何创建和配置List Widget,包括XML布局文件的编写,例如定义一个ListView,并在res/layout目录下创建一个item布局文件,用于定义每行列表项的外观。同时,还可能讨论...

    Android 手机编程实例源码:Widget 源代码

    本实例源码着重探讨了如何创建和管理Android Widget,为开发者提供了一个深入学习和实践的平台。源码包含了Java语言的实现,这使得开发者能够理解和学习到Android应用背后的逻辑和设计模式。 首先,我们来看一下...

    关于android AppWidget初探①

    Android AppWidget是Android系统提供的一种桌面小部件功能,它允许开发者创建可以被用户直接放置在主屏幕上的小型应用程序,提供快捷的功能或者展示实时信息。在本文中,我们将深入探讨AppWidget的基本概念、工作...

    Android ToolBar整合实例使用方法详解

    &lt;androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:...

Global site tag (gtag.js) - Google Analytics