热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

桌面部件

桌面部件是一种利用AppWidget框架将应用程序的某个部件摆放在桌面的组件。要为程序定义桌面组件,首先要在程序的resxml目录下新建一个XML文件来对桌面部件进

桌面部件是一种利用AppWidget框架将应用程序的某个部件摆放在桌面的组件。

要为程序定义桌面组件,首先要在程序的res/xml目录下新建一个XML文件来对桌面部件进行描述(桌面部件描述文件):

【注】这里是做一个显示时间的桌面部件。

android:minWidth="146dip"

android:minHeight="72dip"

android:updatePeriodMillis="1000"

android:initialLayout="@layout/digitalclock"

  />

android:initialLayout="@layout/digitalclock"指定了桌面部件使用的布局文件。

下面是一个桌面部件的高度或宽度所占的单元格数换算最小尺寸的公式:

最小尺寸 = (单元格数*74)-2 (单位:dip)

AppWidget框架是通过广播Intent的方式来对桌面部件进行控制的,所以在AndroidManifest.xml文件中应该有一个广播接收器。AppWidget框架提供了一个继承子BroadcastProviderAppWidgetProvider类。

AppWidgetProvider的回调方法:

onDeleted:一个或多个桌面部件被删除时调用此方法

onUpdate:每当周期跟新时间到了以后就会调用此方法

....

桌面布局的布局文件(可修改main.xml)

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/showtime"

android:textSize="20px"

android:textStyle="bold"

android:textColor="#FFFFFFFF"

android:background="@drawable/bg"

    android:layout_width="wrap_content" 

    android:layout_height="wrap_content" 

    />

bg为一个*.9.png文件文件,可以根据定义的大小自动调整图片的大小。

接下来是定义AppWidgetProvider了:

public class TestAppWidget extends AppWidgetProvider {

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {

// super.onUpdate(context, appWidgetManager, appWidgetIds);

context.startService(new Intent(context, UpdateService.class));

}

public static class UpdateService extends Service {

@Override

public void onStart(Intent intent, int startId) {

// 构造一个美国东部时间的Time对象

Time estTime = new Time("EST");

// 将时间设置为当前

estTime.setToNow();

// RemoteViews是一个描述可在其他进程运行的部件的类,其构造方法需要传入 部件的布局文件以及

// 所在的包的包名

RemoteViews updateViews = new RemoteViews(this.getPackageName(),

R.layout.digitalclock);

updateViews.setTextViewText(R.id.showtime, estTime.format("%H:%M"));

// ComponentName用来表示应用程序中某个组件的完整名字

ComponentName timeWidget = new ComponentName(this,

TestAppWidget.class);

// AppWidgetManager负责桌面部件的管理

AppWidgetManager manager = AppWidgetManager.getInstance(this);

// 通过updateAppWidget传入修改好的RemoteViews对象

manager.updateAppWidget(timeWidget, updateViews);

// super.onStart(intent, startId);

}

public IBinder onBind(Intent arg0) {

return null;

}

}

}

最后要在AndroidManifest.xml文件中进行注册:

      package="com.shutao.testwidger"

      android:versionCode="1"

      android:versionName="1.0">

    

      android:label="@string/app_name">

 

android:name="TestAppWidget"

 android:label="@string/app_name">

android:name="android.appwidget.action.APPWIDGET_UPDATE"/>

android:name="android.appwidget.provider"

android:resource="@xml/testappwidget"

/>

    

 


推荐阅读
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 先看看效果是不是自己想要的吧item及item内部控件点击事件不懂的可以先点击查看 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Xamarin.Android-用ZXing实现二维码扫描以及连续扫描
    一、前言本文的内容有两个基础:ZXing.Net和ZXing.Net.MobileZXing.Net:ZXing的C#实现,主要封装了各种二维码的编码、解码等跨平台的算法ZXing.Net.Mo ... [详细]
  • 转自:http:malideveloper.arm.comcndevelop-for-malisample-codeetcv1-texture-compression-and-alpha- ... [详细]
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • 我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个protectedvoidonScrollChang ... [详细]
  • 发现很多时候展示一堆文字,需要让局部的某些字变粗啊,变大、变颜色、能点击等等要求,今天在这简单总结下方便日后直接复用(用ht ... [详细]
  • 问题说明最近看到Spring事务,在学习过程中遇到一个很苦恼问题搭建好Spring的启动环境后出现了一点小问题在启动时候却出现[java.lang.NullPointerExcep ... [详细]
  • 开发笔记:PyQt5QSlider(滑动条)控件使用
    本文由编程笔记#小编为大家整理,主要介绍了PyQt5-QSlider(滑动条)控件使用相关的知识,希望对你有一定的参考价值。QSlider控件提供了一个垂直或者水平的滑动条,滑 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 开发笔记:(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
陈杰铭雅意
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有