android 桌面控件-数字时钟的实现

接触android已经一个星期了,寻思着做点趣的东西,试一试。所以研究了一下数字时钟,参考了网上很多资料,下面是具体的过程。

桌面空间的实现,我们都知道,首先要继承自AppWidgetProvider类。

(1)public class TimeWidgetProvider extends AppWidgetProvider {

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

@Override
public void onDeleted(Context context, int[] appWidgetIds) {
}

@Override
public void onEnabled(Context context) {
context.startService(new Intent(context, TimeService.class));
}
@Override
public void onDisabled(Context context) {
context.stopService(new Intent(context, TimeService.class));
}

}

onUpdate方法是在appwidget被创建到桌面,更新时间到了或者widget配置activity返回完成时,框架调用此方法进行更新。

onDeleted方法是appwidget被删除时,调用。

onEnabled方法是appwidget首次被创建时,调用方法。

开启TimeService服务。这个TimeService是自己定义的。

具体代码如下》

(2)TimeService.class
package cn.roco.widget.clock;

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.net.Uri;
import android.os.IBinder;
import android.widget.RemoteViews;

public class TimeService extends Service {
	
	private int[] digits = new int[] { R.drawable.digit00, R.drawable.digit01,
			R.drawable.digit02, R.drawable.digit03, R.drawable.digit04,
			R.drawable.digit05, R.drawable.digit06, R.drawable.digit07,
			R.drawable.digit08, R.drawable.digit09, };

	
	private int[] digitViews = new int[] { R.id.img01, R.id.img02, R.id.img03,
			R.id.img04, R.id.img06, R.id.img07, R.id.img09, R.id.img10,
			R.id.img12, R.id.img13, R.id.img15, R.id.img16, R.id.img18,
			R.id.img19 };

	private Timer timer;

	private TimerTask timerTask = new TimerTask() {
		@Override
		public void run() {

			
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
			String time = sdf.format(new Date());
			
			RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
			for (int i = 0; i < time.length(); i++) {

				int num = time.charAt(i) - 48;
				views.setImageViewResource(digitViews[i], digits[num]);
			}
			Intent intent = new Intent(Intent.ACTION_VIEW,
					Uri.parse("tel:10086"));
			PendingIntent pendingIntent = PendingIntent.getActivity(
					getApplicationContext(), 0, intent, 0);
			views.setOnClickPendingIntent(R.id.digit, pendingIntent);

			AppWidgetManager appWidgetManager = AppWidgetManager
					.getInstance(getApplicationContext());
			ComponentName componentName = new ComponentName(
					getApplicationContext(), TimeWidgetProvider.class);
			appWidgetManager.updateAppWidget(componentName, views);
		}
	};

	@Override
	public void onCreate() {
		super.onCreate();
		timer = new Timer();
		timer.schedule(timerTask, 0, 1000);
	}

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

	@Override
	public void onDestroy() {
		super.onDestroy();
		timer.cancel();
		timer = null;
	}

}
(3)layout/main.xml中定义19个imageview控件
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/digit" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:orientation="horizontal"
	android:gravity="center">

	<!-- 定义19个ImageView来显示液晶数字 -->

	<ImageView android:id="@+id/img01" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img02" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img03" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img04" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img05" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:src="@drawable/digity" />

	<ImageView android:id="@+id/img06" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img07" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img08" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:src="@drawable/digity" />

	<ImageView android:id="@+id/img09" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img10" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img11" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:src="@drawable/digite" />

	<ImageView android:id="@+id/img12" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img13" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img14" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:src="@drawable/digit" />

	<ImageView android:id="@+id/img15" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img16" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />

	<ImageView android:id="@+id/img17" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:src="@drawable/digit" />

	<ImageView android:id="@+id/img18" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:src="@drawable/digit" />

	<ImageView android:id="@+id/img19" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
</LinearLayout>
(4)res/drawable文件夹添加用于显示时间的数字图片

 
(5)Manefiest.xml文件进行配置
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="cn.roco.widget.clock" android:versionCode="1"
	android:versionName="1.0">
	<uses-sdk android:minSdkVersion="8" />

	<application android:icon="@drawable/icon" android:label="@string/app_name">
		<!-- 指定广播接受者 -->
		<receiver android:name="TimeWidgetProvider">
			<intent-filter>
				<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
			</intent-filter>
			<meta-data android:name="android.appwidget.provider"
				android:resource="@xml/appwidget_provider" /><!-- 指定provider -->
		</receiver>
		<!-- 指定时钟服务 -->
		<service android:name=".TimeService" />
	</application>
<p></manifest></p><p>(6)res/xml/appwidget_provider.xml配置信息</p><p><?xml version="1.0" encoding="utf-8"?>
<!--
     指定该桌面组件的基本配置信息:
<span style="white-space:pre">	</span>minWidth:桌面小控件的最小宽度。
<span style="white-space:pre">	</span>minWidth:桌面小控件的最小高度。
<span style="white-space:pre">	</span>updatePeriodMillis:更新频率
<span style="white-space:pre">	</span>initialLayout:初始时显示的布局


-->
<!--指定该Widget的布局界面为@layout/main-->
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/main"  
    android:minHeight="30px"
    android:minWidth="300px"
    android:updatePeriodMillis="500"
   />
</p>
至此,完成编写。

 



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值