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 ...
随机推荐
- ●BZOJ 1854 [Scoi2010]游戏
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1854 题解: 并查集(还可以用匈牙利算法进行单路增广的二分图匹配) 把每个武器看成是一条边, ...
- hdu 5427(水)
题意:按照年龄从小到大排序 名字中可能有空格什么的,处理下即可 #include<iostream> #include<cstdio> #include<cstring& ...
- bzoj3675[Apio2014]序列分割 斜率优化dp
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3508 Solved: 1402[Submit][Stat ...
- SpringBoot学习之集成dubbo
一.摘自官网的一段描述 1.背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 ...
- Linux 脚本为什么会有#!
我们在Linux系统终端编辑脚本时第一行通常这么写: #!/usr/bin/env python3 为什么要写这一行,起什么作用? 我们先看看不写这一行会出现什么?那么就会报下面的错误. #!/usr ...
- 什么是spool系统,什么是预输入,什么是缓输出?
操作系统提供外部设备联机同时操作的功能设备spool系统,又称为假脱机系统. spool系统在应用程序执行前将应用程序的信息通过独占设备预先输入到辅存上的一个特定的存储区域存放好.称为预输入. 在应用 ...
- C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
当我们在用C++做底层驱动的时候,经常会遇到内存不足的警告,究其原因,往往是因为内存出现溢出,泄露或者越界等原因.那么他们之间有什么联系吗? 内存溢出(out of memory) 是指程序在申请内存 ...
- Cisco动态路由配置
前言: 学完静态路由配置,该学动态路由.所以 学习完后来做终结. 准备: PC:192.168.1.10 R1:fa0/0 192.168.1.1 fa0/1 1.1.12.1 R2: fa0/0 1 ...
- Linux 定时执行任务:Crontab服务及应用集锦
系统背景:cenos6.5 操作工具:Xshell5 情况一:正常情况(系统有service命令) 重启服务命令:[root@centos6 /]# service crond restart 启动服 ...
- C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形界面 ...