Android的Widget编写实例
来源:互联网 发布:紫川软件靠谱吗? 编辑:程序博客网 时间:2024/05/29 21:18
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 {@Overridepublic 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);}@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {super.onDeleted(context, appWidgetIds);Log.i("i", "onDeleted()");}@Overridepublic void onEnabled(Context context) {super.onEnabled(context);Log.i("i", "onEnabled()");// 启动服务Intent intent = new Intent(context, UpdateTimeService.class);context.startService(intent);}@Overridepublic 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() {@Overridepublic 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);// 更新widgetappWidgetManager.updateAppWidget(componentName, views);}};@Overridepublic void onCreate() {super.onCreate();timer = new Timer();timer.schedule(task, 0, 1000);// 开始任务}@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onDestroy() {super.onDestroy();timer.cancel();// 结束任务}}
清单文件中注册service,加上:
<service android:name=".UpdateTimeService"></service>
- Android的Widget编写实例
- Android中Widget实例
- android widget 开发实例
- android widget 开发实例
- android widget开发实例
- android widget 开发实例
- android widget实例
- Android中Widget实例
- 解析Android Widget开发实例
- Android Widget实例代码解析
- Android App Widget开发实例
- Yii 2.0 Widget的编写
- dojo widget的实例化
- OPhone的Widget实例开发
- android widget的自动更新
- Android Widget的写法
- Android的widget实现
- Android时钟的widget
- Android SQLite数据库操作实例
- TelephonyManager使用
- Android利用ContentResolver查询的三种方式
- iPhone应用程序编程指南(文件和网络)
- 继承BaseAdapter实现自定义Adapter
- Android的Widget编写实例
- Andorid中的Spinner编写实例
- windows如何注册DLL文件
- Android提交数据到服务器的两种方式四种方法
- Midnight Commander
- Mongo 学习笔记--Capped Collection
- ntpdate time.windows.com
- mac os 键值缩写
- SpringMVC+FreeMarker配置详解(验证可用)