剖析Android自带Widget - Clock指针钟表

我们都知道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); //开始执行刷新内容
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值