用法步骤:

1.绘制Widget布局

2.配置Widget的基本属性

3.定义AppWidgetProvider类似于android中的广播

4.提供Configuration Acivity

学习一个小案例:时钟小组件

效果:可以自动更新时间,可以添加和删除时钟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" >  <TextView    android:id="@+id/textview"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="时间显示" /></LinearLayout>

第二步

在res文件夹下创建文件夹xml

在xml文件夹里创建配置文件

<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"    android:initialLayout="@layout/widget"    android:minHeight="40dp"    android:minWidth="100dp"    android:updatePeriodMillis="800000" >    <!-- 配置文件。设置最小宽度,最小高度,加载布局,设置刷新频率毫秒数(最小是30分钟) --></appwidget-provider>

第三步广播:

package com.example.widgettest;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.content.Intent;public class WidgetProvider extends AppWidgetProvider {@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onDeleted(context, appWidgetIds);//被从屏幕移除}@Overridepublic void onDisabled(Context context) {// TODO Auto-generated method stubsuper.onDisabled(context);//最后一个widget被从屏幕移除执行context.stopService(new Intent(context,TimerService.class));}@Overridepublic void onEnabled(Context context) {// TODO Auto-generated method stubsuper.onEnabled(context);//第一个Widget被添加到屏幕时执行,//启动servicecontext.startService(new Intent(context,TimerService.class));}@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubsuper.onReceive(context, intent);//在其他方法被调用时被其他方法默认调用}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onUpdate(context, appWidgetManager, appWidgetIds);//刷新widget时,通过remoteView和AppWidgetManager}}

第四步:创建服务

public class TimerService extends Service {private Timer timer;//定时器private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化日期@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubupdateViews();}}, 0, 1000);//参数三每1秒更新一次,参数二延迟是0;}/** * 更新widget操作 */private void updateViews(){String time = sdf.format(new Date());RemoteViews rv = new RemoteViews(getPackageName(),R.layout.widget);rv.setTextViewText(R.id.textview, time);AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());ComponentName cn = new ComponentName(getApplicationContext(),WidgetProvider.class);manager.updateAppWidget(cn, rv);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();//被销毁时停止timer = null;}}


第五步配置文件中声明。服务和广播

  <service android:name="com.example.widgettest.TimerService" >        </service>        <receiver android:name="com.example.widgettest.WidgetProvider" >            <intent-filter>                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />            </intent-filter>            <meta-data                android:name="android.appwidget.provider"                android:resource="@xml/widgetconfig" />        </receiver>

注意:

在AndriodManifest.xml中配置receiver的meta-date中android:name应该是android.appwidget.provider而不是android.widget.provider
不然会找不到这个小控件



更多相关文章

  1. android 获取屏幕尺寸,密度等信息
  2. 单击Button 更改屏幕方向
  3. android获取版本信息、屏幕信息和设备编号
  4. android 判断屏幕是横屏还是竖屏
  5. Android 监听屏幕熄屏亮屏和主动唤醒屏幕
  6. android 获取屏幕的宽度和高度
  7. android屏幕休眠和唤醒两种方法(newWakeLock)

随机推荐

  1. 英特尔® Android* USB 驱动程序安装说明
  2. 也谈Android的学习和利用Android来赚钱
  3. android平板上的GridView视图缓存优化
  4. 【Android】Android(安卓)4.0 无法接收开
  5. Android各种资源详解
  6. 详解 Android(安卓)的 Activity 组件
  7. Android(安卓)自己动手写ListView学习其
  8. Android中文合集(5)(126+8篇)(chm格式)
  9. 用Android(安卓)NDK r6编译boost 1.47
  10. 从Android界面开发谈起