Android简易实战教程--第十四话《模仿金山助手创建桌面Widget小部件》
打开谷歌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小部件》的更多相关文章
- Android简易实战教程--第二十四话《画画板》
今天完成一个画画板. 首先来个布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android ...
- Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》
之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...
- Android简易实战教程--第二十九话《创建图片副本》
承接第二十八话加载大图片,本篇介绍如何创建一个图片的副本. 安卓中加载的原图是无法对其修改的,因为默认权限是只读的.但是通过创建副本,就可以对其做一些修改,绘制等了. 首先创建一个简单的布局.一个放原 ...
- Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
本篇接第二十五话 点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52389856 上一篇已经把王略中的图片获取到了.生活中有这么 ...
- Android简易实战教程--第十五话《在外部存储中读写文件》
第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意 ...
- Android简易实战教程--第二十八话《加载大图片》
Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出.假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃.这种异常是无法捕获的 内存不足并不 ...
- Android简易实战教程--第二十五话《网络图片查看器》
访问网络已经有了很成熟的框架.这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的"注意点".这一篇可以复习或者学习HttpURLConnection.han ...
- Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》
昨晚写博客太仓促,代码结构有问题,早上测试发现没法监听文本变化!今日更改一下.真心见谅啦,哈哈!主活动的代码已经改好了,看截图这次的确实现了文本监听变化情况. 监听文本输入情况,仅仅限于土司略显low ...
- Android简易实战教程--第十八话《ListView显示,简单的适配器SimpleAdapter》
本篇介绍Listview的显示,对于listview有许多的适配器,如ArrayAdapter,BaseAdapter,SimpleAdapter等等.本篇先热身一下,介绍最简单的SimpleAdap ...
随机推荐
- xx学院学员评优评奖管理系统
[勤拂拭软件,软件开发,毕业设计,程序作业,论文写作指导:q-[1215714557] 加好友请注明:勤拂拭)] 之前帮助一个军校学生做的一个评优评奖管理系统,该系统主要用于学校学生评优评先使用. ...
- 试说明采用双缓冲技术如何进行I/O操作
输入设备先将第一个缓冲区装满数据,在输入设备向第二个缓冲区装数据时,处理机就可以从第一个缓冲区取出数据进行处理:当一个缓冲区的数据处理完毕,若第二个缓冲区已经装满,则处理机又可以从第二个缓冲区取出数据 ...
- 如何使用GitHub
进行版本控制时,我们可以直接通过网页来进行版本控制,也可以下载git客户端.值得注意的是,git的客户端有很多种,具体的可以参考:https://git-scm.com/downloads/guis/ ...
- Tensorflow 基于分层注意网络的文件分类器
After the exercise of building convolutional, RNN, sentence level attention RNN, finally I have come ...
- java的迭代器详解
迭代器的引出 在jdk1.5版本之前是没有 foreach的,然而1.5版本就加上了foreach,而引入的新的foreach功能并不是在jvm上进行改进的因为代价太高,甲骨文工程师想到了一个比较好的 ...
- 14_Python将列表作为栈和队列_Python编程之路
上一篇文章跟大家介绍了列表的一些方法,这一节我们还是讲列表 只是这一节我们要联系一些数据结构,来讲列表 栈 首先我们要理解一下栈是一种什么数据结构 栈(stack)又名堆栈,它是一种运算受限的线性表. ...
- chrome 如何卸载干净
安装位置C:\Users\你电脑的用户名\AppData\Local\Google,删除整个文件夹,用CCleaner扫描注册表删除无用注册表项,重启安装即可.
- 使用Aes对称加密解密Web.Config数据库连接串
现在很多公司开始为了保证数据库的安全性,通常会对Web.Config的数据库连接字符串进行加密.本文将介绍学习使用Aes加密解密数据库连接字符串.本文采用MySql数据库. AES概念简述 AES 是 ...
- linux安装ftp
安装vsftpd 1.以管理员(root)身份执行以下命令 1. yum install vsftpd 2.设置开机启动vsftpd ftp服务 1. chkconfig vsftpd on 3. ...
- centos 7 破解密码
CentOS 7 root密码的重置方式和CentOS 6完全不一样,CentOS 7与之前的版本6变化还是比较大的,以进入单用户模式修改root密码为例. 1.重启开机按esc 2.按e ...