Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 662|回复: 0

第三十五讲:App Widget入门指南 -  Android学习

[复制链接]

该用户从未签到

发表于 2011-10-25 08:54:36 | 显示全部楼层 |阅读模式
  本讲内容: Android中桌面小部件、App Widget的开发入门指导一、Widget 、App Widget 、Web App 的概念Widget最初的概念是98年一个叫Rose的苹果工程师提出,直到2003年的时候才正式为大家所知,不过随后无数大公司都开始接受并应用这一思路。现在我们看到在苹果系统里按下F4弹出的Dashboard里的小工具叫Widget,在Windows 7里侧边栏上的那些漂亮的小工具叫Gadget(widget变体?),除此以外还有yahoo Widget等等Widget产品。他们有一个共同的特点就是采用前台Web开发用的技术(譬如HTML、CSS、javascript)来制作的小工具、小部件。

  在Android系统里,几乎每个可视化的View组件都叫Widget,起这个名字可能当时是为了赶时髦。

  App Widget是从Android 1.5以后才有的东东,就是可以放在Android桌面上的应用程序小组件。这一点上看他的功能很像windows的侧边栏小工具,可惜的是他的采用技术并不是HTML等技术。当然App Widget才是我们本讲的主角,本来他应该顺理成章叫做Widget的,至少也要叫做Gadget吧,可惜这个名字已经被他自己的系统占用了,所以只好改名叫App Widget。

  最后讲一下Web App 或者说是Android Web Application,也许叫 mobile web application 更准确些。我们发现现在智能机系统平台很多,譬如iOS、Android、Windows Phone 、WebOS、BlackBerry等等,它们采用的技术框架也各不相同,有没有办法写一个程序在各个系统上都能运行呢?答案是肯定的,写基于Webkit的浏览器的应用即可。我们使用 HTML5、CSS3、JavaScript、WebKit 等技术来写的Web Application也许是今后的一个大潮流也说不准啊。有机会我们再讲讲Android Web Application 的开发。

  二、APP Widget 的简单例子: Hello App Widget!

  App Widget的技术实现有那么一点点绕,我们用一个最简单的例子HelloAppWidget来操作一遍,然后再针对这个例子做讲解,也许你会理解的更快些。

  1、新建一个项目 Lesson35_HelloAppWidget ,注意创建时可以不选Create Activity





  2、准备好一个Widget的显示布局文件 layout/widget.xml 内容如下:

<?xml version="1.0" encoding="utf-8"?>

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" androidrientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center">

<textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/textView1" android:text="欢迎进入App Widget的世界!" android:textcolor="#ff0000ff">

</textview></linearlayout>        
复制代码
  3、准备好一个Widget的配置文件 xml/provider_info.xml,该文件配置了widget可以占用的屏幕长宽、更新频率,所显示的布局文件(就是上面的那个布局文件)等,其内容如下:

<?xml version="1.0" encoding="utf-8"?>

<!-- appwidget-provider Widget的配置文件  -->

<!-- android:minWidth 最小宽度 -->

<!-- android:minHeight 最小高度 -->

<!-- android:updatePeriodMillis 组件更新频率(毫秒) -->

<!-- android:initialLayout 组件布局XML的位置 -->

<!-- android:configure Widget设置用Activity -->

<appwidget -provider="" xmlns:android="http://schemas.android.com/apk/res/android" android:initiallayout="@layout/widget" android:updateperiodmillis="86400000" android:minheight="72dp" android:minwidth="294dp">

</appwidget>
复制代码
  4、准备好一个处理widget请求的Java文件,basic.android.lesson35包下的HelloWidgetProvider,他继承了AppWidgetProvider类,在本例中没有任何请求处理的具体代码,我在java文件中写了大量注释,方便你的理解。内容如下:

package basic.android.lesson35;



import android.appwidget.AppWidgetManager;

import android.appwidget.AppWidgetProvider;

import android.content.Context;

import android.content.Intent;

import android.util.Log;



// AppWidgetProvider 是 BroadcastReceiver 的子类,本质是个 广播接收器,它专门用来接收来自 Widget组件的各种请求(用Intent传递过来),所以如果让我给他起名的话 我会给他命名为AppWidgetReceiver,每一个Widget都要有一个AppWidgetProvider.

public class HelloWidgetProvider extends AppWidgetProvider {



        //每个请求都会传递给onReceive方法,该方法根据Intent参数中的action类型来决定自己处理还是分发给下面四个特殊的方法。

        @Override

        public void onReceive(Context context, Intent intent) {



                Log.i("yao", "HelloWidgetProvider --> onReceive");

                super.onReceive(context, intent);

        }



        //如果Widget自动更新时间到了、或者其他会导致Widget发生变化的事件发生,或者说Intent的值是android.appwidget.action.APPWIDGET_UPDATE,那么会调用onUpdate,下面三个方法类似

        @Override

        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

                //AppWidgetManager 顾名思义是AppWidget的管理器,appWidgetIds 桌面上所有的widget都会被分配一个唯一的ID标识,那么这个数组就是他们的列表

                Log.i("yao", "HelloWidgetProvider --> onUpdate");

                super.onUpdate(context, appWidgetManager, appWidgetIds);

        }



        //当一个App Widget从桌面上删除时调用

        @Override

        public void onDeleted(Context context, int[] appWidgetIds) {

                Log.i("yao", "HelloWidgetProvider --> onDeleted");

                super.onDeleted(context, appWidgetIds);

        }



        //当这个App Widget第一次被放在桌面上时调用(同一个App Widget可以被放在桌面上多次,所以会有这个说法)

        @Override

        public void onEnabled(Context context) {

                Log.i("yao", "HelloWidgetProvider --> onEnabled");

                super.onEnabled(context);

        }



        //当这个App Widget的最后一个实例被从桌面上移除时会调用该方法。

        @Override

        public void onDisabled(Context context) {

                Log.i("yao", "HelloWidgetProvider --> onDisabled");

                super.onDisabled(context);

        }



}
复制代码

  6、编译并运行程序,我们知道这种Widget程序,即使装完了也不会在程序列表中出现,因为它根本就没有main Activity,下面我给不清楚的同学说一下如何把一个widget放到桌面上:





在模拟器上桌面上长按,等待弹出下面对话框,







选择窗口小部件







选择Hello,App Widget







  OK,看到桌面上出来一行看起来蛮舒服的一行蓝色小字了吗,恭喜你,你已经进入了 App widget 的世界。当然后面的内容更精彩,我们会学习 PendingIntent 和 RemoteViews 等和 App widget的配合,制作更加实用的App Widget。

  三、桌面上的音乐播放器小部件(待续)
回复

使用道具 举报

该用户从未签到

发表于 2011-10-25 08:54:39 | 显示全部楼层

Re:第三十五讲:App

感谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-25 08:54:41 | 显示全部楼层

Re:第三十五讲:App

谢谢!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 14:04 , Processed in 0.402498 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表