说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android自带Widget - Clock指针钟表源代码分析

HTML文档下载 WORD文档下载 PDF文档下载
我们都知道Android操作系统自带了几个Widget组件,比如带指针的钟表,本文分析了该钟表的Widgets部分的实现。

作者:Android开发网

我们都知道Android操作系统自带了几个Widget组件,比如带指针的钟表,一般在Home Screen上的那个表盘,它在哪里呢? 我们其实在alarmclock这个包中可以看到,下面就来一起分析一下实现的方法。其实有关内部的更新在AnalogClock类已经完成了,这里仅仅分析Widgets部分。

首先看下alarmclock中有关widgets的AndroidManifest.xml描述内容如下:

 

<receiver android:name="AnalogAppWidgetProvider" android:label="@string/analog_gadget-android123">             <intent-filter>                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />             </intent-filter>            <meta-data android:name="android.appwidget.provider" android:resource="@xml/analog_appwidget" /></receiver>

xml/analog_appwidget.xml的内容如下

 

<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"     android:minWidth="146dip"  //widget最小宽度     android:minHeight="146dip" //widget最小高度     android:updatePeriodMillis="0" //更新频率,单位为毫秒     android:initialLayout="@layout/analog_appwidget"  > </appwidget-provider>

layout/analog_appwidget.xml的内容如下

 

<AnalogClock xmlns:android="http://schemas.android.com/apk/res/android"      android:dial="@drawable/appwidget_clock_dial"   //表盘背景图片     android:hand_hour="@drawable/appwidget_clock_hour"   //时针图片     android:hand_minute="@drawable/appwidget_clock_minute" //分针图片     android:layout_width="fill_parent"       android:layout_height="fill_parent" />

最后我们看下androidmanifest.xml中的receiver是如何触发的,AnalogAppWidgetProvider.java的内容如下

 

public class AnalogAppWidgetProvider extends BroadcastReceiver {    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();                if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {            RemoteViews views = new RemoteViews(context.getPackageName(),                    R.layout.analog_appwidget); //这里RemoteViews载入的布局文件                        int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);                        AppWidgetManager gm = AppWidgetManager.getInstance(context);            gm.updateAppWidget(appWidgetIds, views); //开始执行刷新内容        }    }}

 

 

 

 

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘