桌面小控件appwidget的简单使用

来源:互联网 发布:淘宝上很污的买家秀 编辑:程序博客网 时间:2024/05/18 20:35

代码如下

package com.example.today804;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.R.color;import android.R.integer;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.util.Log;import android.view.Menu;import android.widget.RemoteViews;public class MainActivity extends AppWidgetProvider {private AppWidgetManager appWidgetManager;private Context context;// 将0~9的液晶数字图片定义成数组private int[] digits = { R.drawable.su01, R.drawable.su02, R.drawable.su03,R.drawable.su04, R.drawable.su05, R.drawable.su06, R.drawable.su07,R.drawable.su08, R.drawable.su09, R.drawable.su10, };// 将显示小时、分钟、秒钟的ImageView定义成数组private int[] digitViews = { R.id.ivh1_main, R.id.ivh2_main,R.id.ivm1_main, R.id.ivm2_main, R.id.ivs1_main, R.id.ivs2_main };@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("receive");if (intent.getAction().equals("mytesttoday804")) {RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.activity_main);remoteViews.setTextColor(R.id.tvshowtime_main, Color.RED);ComponentName componentName = new ComponentName(context,MainActivity.class);System.out.println("receive==mytesttoday804");AppWidgetManager app = AppWidgetManager.getInstance(context);app.updateAppWidget(componentName, remoteViews);}super.onReceive(context, intent);}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {this.context = context;this.appWidgetManager = appWidgetManager;
/*桌面拉了几个相同的控件,数组的长度就是几。。两个按钮一个用来打开拨号界面,一个用来修改文本颜色*/for (int i = 0; i < appWidgetIds.length; i++) {RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.activity_main);Intent intents = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:123"));PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intents, 0);remoteViews.setOnClickPendingIntent(R.id.bt1_main, pendingIntent);Intent intents2 = new Intent("mytesttoday804");PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context,1, intents2, 0);remoteViews.setOnClickPendingIntent(R.id.bt2_main, pendingIntent2);appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);System.out.println(appWidgetIds.length + ":::" + i);}new Timer().schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(0x123);}}, 0, 1000);}private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.activity_main);if (msg.what == 0x123) {// 将当前时间格式化String currentTime = new SimpleDateFormat("HHmmss").format(new Date());for (int i = 0; i < currentTime.length(); i++) {int index = Integer.parseInt(currentTime.charAt(i) + "");remoteViews.setImageViewResource(digitViews[i],digits[index]);}ComponentName componentName = new ComponentName(context,MainActivity.class);remoteViews.setTextViewText(R.id.tvshowtime_main, currentTime);appWidgetManager.updateAppWidget(componentName, remoteViews);}};};}


代码里有8张图,分别对应6个数字以为时间之间的冒号 :

下边有2个按钮,一个文本框

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/LinearLayout1"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content" >        <ImageView            android:id="@+id/ivh1_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su01" />        <ImageView            android:id="@+id/ivh2_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su01" />        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su00" />        <ImageView            android:id="@+id/ivm1_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su01" />        <ImageView            android:id="@+id/ivm2_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su01" />        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su00" />        <ImageView            android:id="@+id/ivs1_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su01" />        <ImageView            android:id="@+id/ivs2_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@drawable/su01" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content" >        <Button            android:id="@+id/bt1_main"            style="?android:attr/buttonStyleSmall"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="打电话" />        <TextView            android:id="@+id/tvshowtime_main"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="TextView" />        <Button            android:id="@+id/bt2_main"            style="?android:attr/buttonStyleSmall"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="改变文本颜色" />    </LinearLayout></LinearLayout>


manifest清单文件里如下,mytesttoday804为自定义的一个action

<receiver android:name="com.example.today804.MainActivity"          android:label="@string/app_name">          <intent-filter >              <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>              <action android:name="mytesttoday804"/>          </intent-filter>          <meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/appwidget_provider" />      </receiver>

appwidget_provider代码如下,用来设置小空间的一些基本属性。。

<?xml version="1.0" encoding="utf-8"?>  <!-- 指定该桌面组件的基本配置信息:minWidth:桌面控件的最小宽度。minWidth:桌面控件的最小高度。updatePeriodMillis:更新频率initialLayout:初始时显示的布局 -->  <appwidget-providerxmlns:android="http://schemas.android.com/apk/res/android"android:minWidth="150dip"android:minHeight="70dip"android:updatePeriodMillis="61000000"android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen|keyguard" android:initialLayout="@layout/activity_main"/>



原创粉丝点击