打开谷歌api,对widget小部件做如下说明:

App Widgets are miniature application views that can be embedded in otherapplications(such as the Home screen) and receive periodic updates. These views arereferred to as Widgets in the user interface,and you can publish one with an App Widget provider.
An application componentthat is able to hold other App Widgets is called an App Widget host. The screenshotbelow showsthe Music App Widget.还举例说明了最常用的小部件为音乐播放器widget:

文档给出了很详细的使用方法。具体的操作如下:

First, declare the AppWidgetProvider class in yourapplication'sAndroidManifest.xml file. For example:

<receiver android:name="ExampleAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>

那么照猫画虎,我们在自己应用创建一个demo来做出这个小部件:

新建工程,多创建一个类:public class ExampleAppWidgetProvider extends AppWidgetProvider{}它是一个特殊的广播接受者

把上边代码,全部复制到自己的清单文件,发现android:resource="@xml/example_appwidget_info"会报错,因为工程里没有这个引用,因此创建xml文件夹,再创建example_appwidget_info这个xml文件,里面的具体内容,继续看api文档:

接下来看到这么一行文字:

Adding the AppWidgetProviderInfo Metada

下边紧跟着这样代码:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:updatePeriodMillis="86400000"
android:previewImage="@drawable/preview"
android:initialLayout="@layout/example_appwidget"
android:configure="com.example.android.ExampleAppWidgetConfigure"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen">
</appwidget-provider>

我们需要把它复制到刚刚创建的example_appwidget_info文件里面

复制过去之后,会发现两行代码报错:

android:previewImage="@drawable/preview"

    android:initialLayout="@layout/example_appwidget"

分贝是布局,以及图片。我们工程显然没有这两个资源,因此需要创建这两个资源。而为了模仿金山卫士的哪个小部件,我直接去复制了金山卫士的资源。

文件名称为:process_widget_provider

把里面的内容,全部复制到刚才的example_appwidget_info文件里面

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/process_widget"
android:minHeight="72.0dip"
android:minWidth="294.0dip"
android:updatePeriodMillis="0" />

当然,还没引入initialLayout,这行代码肯定也是报错。那么我们就u加入这个布局资源。

金山助手的res的layout文件下有process_widget文件,全部拷贝到自己工程里面去

这样,上一次的文件没错误,新的文件错误又来了。不要担心,基本都是没有资源报错的,只要引入相应的资源就好了。

在金山的源代码中,赋值那些报错的资源引用。最终自该好的代码如下:(不需要理解全部,但要知道如何赋值粘贴,知道制作的过程)

相信都能通过引用资源,排除这些错误。现在可以运行一下了——

现在可以把它直接拖拽到桌面上显示了。如下:

这样,这个小部件已经创建完毕了!模仿show就这样完成了。

那么,怎么样才能在这个小界面上加入数据呢?之前我们还有一个类,public class ExampleAppWidgetProvider extends AppWidgetProvider{}它是一个特殊的广播接受者

还没有对它做任何的代码逻辑,其实,这个广播接收者就是与widget联系起来的。加入如下方法,一目了然。现在开始在这里面写代码了:

首先,体验一些widgit的生命周期。覆盖一些方法如下:

public class ExampleAppWidgetProvider extends AppWidgetProvider {

	@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
System.out.println("onDeleted");
} @Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
super.onDisabled(context);
System.out.println("onDisabled");
} @Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
super.onEnabled(context);
System.out.println("onEnabled");
} @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
System.out.println("onReceive");
} @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
System.out.println("onUpdate");
} }

运行,在此创建widget部件。查看一下log输出:

加入创建两个小控件:

看到多了两个打印。再创建——

当然还是执行上边画红线的输出。

现在删除一个部件,打印输出:

onDeleted

onReceive

继续删除掉最后一个:

onDeleted

onReceive

onDisabled

onReceive

可以总结出:onDisabled和onEnabled都仅仅执行一次。那么这两个方法关键方法;一个创建时执行,一个销毁时执行。一些自己的逻辑代码就写在这两个方法里面。

至于写什么逻辑,要根据自己的需求来定了。这样,widget小部件的生成就讲完了。

Android简易实战教程--第十四话《模仿金山助手创建桌面Widget小部件》的更多相关文章

  1. Android简易实战教程--第二十四话《画画板》

    今天完成一个画画板. 首先来个布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  2. Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》

    之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...

  3. Android简易实战教程--第二十九话《创建图片副本》

    承接第二十八话加载大图片,本篇介绍如何创建一个图片的副本. 安卓中加载的原图是无法对其修改的,因为默认权限是只读的.但是通过创建副本,就可以对其做一些修改,绘制等了. 首先创建一个简单的布局.一个放原 ...

  4. Android简易实战教程--第二十六话《网络图片查看器在本地缓存》

    本篇接第二十五话  点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52389856 上一篇已经把王略中的图片获取到了.生活中有这么 ...

  5. Android简易实战教程--第十五话《在外部存储中读写文件》

    第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意 ...

  6. Android简易实战教程--第二十八话《加载大图片》

    Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出.假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃.这种异常是无法捕获的 内存不足并不 ...

  7. Android简易实战教程--第二十五话《网络图片查看器》

    访问网络已经有了很成熟的框架.这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的"注意点".这一篇可以复习或者学习HttpURLConnection.han ...

  8. Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》

    昨晚写博客太仓促,代码结构有问题,早上测试发现没法监听文本变化!今日更改一下.真心见谅啦,哈哈!主活动的代码已经改好了,看截图这次的确实现了文本监听变化情况. 监听文本输入情况,仅仅限于土司略显low ...

  9. Android简易实战教程--第十八话《ListView显示,简单的适配器SimpleAdapter》

    本篇介绍Listview的显示,对于listview有许多的适配器,如ArrayAdapter,BaseAdapter,SimpleAdapter等等.本篇先热身一下,介绍最简单的SimpleAdap ...

随机推荐

  1. 【网络流】【BZOJ1221】【HNOI2001】软件开发

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1221 题意:你有3种方法进行对毛巾的处理,不同的处理方法有不同的cost,问你要如何规划才 ...

  2. [BZOJ]1045 糖果传递(HAOI2008)

    放一道数学题. Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=1000000,表示 ...

  3. [USACO08JAN]跑步Running

    题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ...

  4. 关于 Cannot forward after response has been committed的错误

    这个错误顾名思义:就是在给客户端做出提交响应完毕后,就不能再次使用request的转发. 代码原先是这样的: package com.bdqn.jsp.study.web.filter; import ...

  5. Android绘制文字时垂直居中

    canvas.drawText(String text, float x, float y, Paint paint); 是Android中绘制文本的方法,其中的x代表文字绘制时在X轴的起始点,而y是 ...

  6. rsync 系统用户/虚拟用户 备份web服务器数据及无交互定时推送备份

    一.服务环境 (1),WEBserver(192.168.10.130) : BACKserver(192.168.10.129) (2),BACKserver服务器部署,安装所需软件,并启动 (3) ...

  7. c# error

    部署iis c# 连sqlserver 用IIS发布之后,网页出错.提示为:异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\I ...

  8. iOS支付宝,微信,银联支付集成封装调用(下)

    一.越来越多的app增加第三方的功能,可能app有不同的页面但调用相同的支付方式,例如界面如下: 这两个页面都会使用第三方支付支付:(微信,支付宝,银联)如果在每一个页面都直接调用第三方支付的接口全部 ...

  9. mysql5.7在centos上安装的完整教程以及相关的“坑”

    安装前的准备 Step1: 如果你系统已经有mysql,如一般centos自带mysql5.1系列,那么你需要删除它,先检查一下系统是否自带mysql yum list installed | gre ...

  10. 操作系统内核Hack:(二)底层编程基础

    操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...