Android-App Widget入门指南

合集下载

AppWidgetProvider使用介绍

AppWidgetProvider使用介绍

AppWidgetProvider使⽤介绍⼀介绍AppWidgetProvider是android中提供的⽤于实现桌⾯⼩⼯具的类,其本质是⼀个⼴播,即BroadcastReceiver。

下⾯是类的继承关系。

所以,在实际的使⽤中,把AppWidgetProvider当成⼀个BroadcastReceiver就可以了,这样许多功能就很好理解了。

⼆开发⼀个桌⾯⼩⼯具的步骤1 定义⼩⼯具界⾯:在res/layout/下新建⼀个xml⽂件,名为widget.xml,名称和内容可以⾃定义,看你的⼩⼯具要做成什么样⼦。

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent" ><ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:src="@drawable/clear_cover" /></RelativeLayout>2 定义⼩⼯具配置信息:在res/xml/下新建appwidget_provider_info.xml,名称随意选,添加如下内容<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="/apk/res/android"android:initialLayout="@layout/widget"android:minHeight="84dp"android:minWidth="84dp"android:updatePeriodMillis="86400000" ></appwidget-provider>上⾯⼏个参数意义很明确,initialLayout就是指⼩⼯具所使⽤的初始化布局,minHeight和minWidth定义⼩⼯具的最⼩尺⼨,updatePeriodMillis定义了⼩⼯具的⾃动更新周期,毫秒为单位,每隔⼀个周期,⼩⼯具的⾃动更新就会触发。

AppWidget

AppWidget

AppWidget一AppWidget 简介AppWidget指应用程序窗口小部件,是微小的应用程序视图,可以嵌入到其他的应用程序(通常指桌面(Home Screen))中并接收周期性的更新。

AppWidgets只是应用程序窗口小部件,但在Android 4.0 中被作为一个很重要的特征充分地展现出来了,用一个Tab页单独表示所有已安装的widgets。

如图1:图1 Google内置的Widgets页面常见的Google内置的Widgets有:Browser、Calendar、Contacts、DeskClock、Email、Gallery、Music、Settings、QuickSearchBox等。

一个已经被添加到Launcher的AppWidget如图2所示,是一个Calender加载到桌面上之后显示的画面:图2 加载到桌面之后的Calender Widget对于某些特定的应用来说,比如股票软件、天气、时钟,能够方便快捷地得到实时信息是很有必要的,这就是Widgets的好处:可以加载到桌面上显示,并且周期性的更新。

二与AppWidget实现相关的一些基本类(1)AppWidgetProviderInfo作用:为AppWidget提供元数据,包括布局、更新频率等数据,该对象定义在XML文件当中, 以<appwidget-provider>做标签。

xml文件存放在/res/xml/下,如/res/xml/xxxx_widget_info.xml。

通常一个widget_info.xml文件里的内容有:与之对应,AppWidgetProviderInfo 类的属性有:minWidth和minHeight 属性的值指定了这个AppWidget 布局需要的最小区域。

minResizeWidth 和minResizeHeight 指定Widget 能被重新指定的最小的宽高,如果指定的值比minWidth 和minHeight 大或者指定的resizemode 不可用,这两个属性值就不起作用了。

转载一份关于appwidget很详细

转载一份关于appwidget很详细

转载⼀份关于appwidget很详细简介1 Android widgetAndroid widget 也称为桌⾯插件,其是android系统应⽤开发层⾯的⼀部分,但是⼜有特殊⽤途,⽽且会成为整个android系统的亮点。

Android中的AppWidget与google widget和中移动的widget并不是⼀个概念,这⾥的AppWidget只是把⼀个进程的控件嵌⼊到别外⼀个进程的窗⼝⾥的⼀种⽅法。

2 AppWidget Framework2.1 定义Android系统增加了AppWidget 框架,⽤以⽀持widget类型应⽤的开发。

AppWidget 框架主要由两个部件来组成:(1)AppWidgetService是框架的的核⼼类,是系统 service之⼀,它负责widgets的管理⼯作。

加载,删除,定时事件等都需要AppWidgetService的处理。

开机⾃启动的。

AppWidgetService存在的⽬的主要是解开AppWidgetProvider和AppWidgetHost之间的耦合。

如果AppWidgetProvider和AppWidgetHost的关系固定死了,AppWidget就⽆法在任意进程⾥显⽰了。

⽽有了AppWidgetService,AppWidgetProvider根本不需要知道⾃⼰的AppWidget在哪⾥显⽰了。

(2)AppWidgetManager 负责widget视图的实际更新以及相关管理。

2.2 AppWidget Framework的⼤致流程1. 编写⼀个widget(先不考虑后台服务以及⽤户管理界⾯等)实际是写⼀个事件监听类即⼀个BroadcastReceiver⼦类,当然框架已经提供了⼀个辅助类AppWidgetProvider,实现的类只要实现其⽅法即可,其中必须实现的⽅法是onUpdate ,其实就是⼀个定时事件,widget监听此事件另外就是规划好视图(layout),将此widget打包安装。

widget用户交互(android)

widget用户交互(android)

Android 妙招解决App Widget用户交互 2010年01月07日 07:28 【IT168技术】App Widget对于Android来说是非常强大的。

通过它,开发人员可以创建简单的控件,在主屏幕上或在任何程序中提供类似的主机托管功能。

在创建一主屏幕App Widget时,您学习了如何创建和配置一个App Widget。

这个简单的应用程序插件播放了一个由用户预先设定时间间隔的图像幻灯片。

但是,如果用户想改变这个时间间隔?如果他们想暂停幻灯片或立即跳到下一张图片他们该怎么做呢?在本文中,您将学习如何对App Widget增加用户控件来处理这些行为。

为了处理与App Widget的交互,必须执行下面的任务:1、为每个App Widget控件设置唯一的单击处理器。

2、这个单击处理器向注册接收器发送一个命令3、处理收到的命令并执行任何必要行动4、更新App Widget,以反映变化在这个例子中,我们将修改之前文章所创建的App Widget(图1,顶上的App Widget ),包括一个带有三个控件的按钮栏(图1,底部App Widget)。

按钮栏上的每个按钮将执行一项具体的行动,然后点击App Widget的任何地方将隐藏按钮栏。

左边的按钮(工具集)将启动配置活动,用户可以改变幻灯片图像转换之间的时间间隔。

中间的按钮将暂停或恢复,幻灯片。

右侧的按钮,允许用户立即跳到下一张图片。

Figure 1: App Widget的三个不同状态Working with RemoteViews一个App Widget使用一种叫做RemoteViews的特殊的显示控件。

与普通视图不同的是,设计RemoteViews控件的目的是显示另一个进程中的视图控件的集合。

因此,不能简单地添加一个按钮处理程序,因为该代码将在应用程序的进程中运行,而不是在显示RemoteViews 对象的进程中(在这种情况下,主屏幕的进程中)。

Android开发之AppWidget详解

Android开发之AppWidget详解

Android开发之AppWidget详解Android通知系统是它的⼀⼤特⾊,⽽其中,AppWidget是其中⼀个亮点。

在开发应⽤的中,很多时候可以为其添加⼀个AppWidget显⽰在桌⾯中,及时⽅便的与⽤户进⾏交互。

这⾥就简单的熟悉⼀下开发⼀个AppWidget的流程吧。

想要在应⽤中创建⼀个AppWidget,⾄少需要以下⼏样东西:1. 需要创建⼀个AppWidgetProviderInfo,来描述AppWidget的元数据。

2. 需要实现⼀个⾃⼰的AppWidgetProvider对AppWidget进⾏更新等操作。

3. 需要布局⽂件来描述AppWidget的布局。

那么,下⾯就开始创建⼀个AppWidget吧。

⼀、在AndroidManifest.xml中声明⼀个AppWidget⾸先我们需要在AndroidManifest.xml中声明AppWidgetProvider。

格式如下:<receiver android:name="MyAppWidgetProvider" ><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><meta-data android:name="android.appwidget.provider"android:resource="@xml/my_appwidget_info" /></receiver>可以看出AppWidgetProvider实际上就是⼀个BroadcastReceiver,它接收特定的Broadcast。

<meta-data>标签描述了AppWidget所使⽤的元数据,android:resource则声明了定义元数据的xml⽂件的位置。

AppWidget的使用详解(1)

AppWidget的使用详解(1)

AppWidget就是HomeScreen上显示的小部件,提供直观的交互操作。

通过在HomeScreen中长按,在弹出的对话框中选择Widget部件来进行创建,长按部件后并拖动到垃圾箱里进行删除。

同一个Widget部件可以同时创建多个。

而初学者对这不是很了解,包括我自己;我也是在学习这个学习了很长时间,因为我自己在做的时候,遇到了各种各样的问题。

下面是我自己通过很长时间学习的总结以及我在这个过程中遇到的问题,我也会写下来:1.首先需要提供一个定义了Widget界面布局的XML文件(位于res/layout/..),需要注意的是使用的组件必须是RemoteViews所支持的,目前原生API中支持的组件如下:FrameLayout LinearLayout R elativeLayoutAnalogClock Button Chronmeter ImageButton ImageView ProgressBar TextViewExample_widget.xml:<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/widgetTextid"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Frist_Widget"android:background="#000000"/></LinearLayout>2.然后我们要在res目录下,新建一个xml目录,在xml目录下,新建一个.xml文件例如:我在下面,新建一个xxx.xml,然后在类型选择AppWidget ProviderXxx.xml:<?xml version="1.0"encoding="utf-8"?><appwidget-providerxmlns:android="/apk/res/android" android:minWidth="294dp"android:minHeight="72dp"android:updatePeriodMillis="86400000"android:initialLayout="@layout/example_widget"></appwidget-provider>4.新建一个类,这个类继承AppWidgetProvider(注意:这里是新建一个类,不是在本身的Activity类继承AppWidgetProvider),AppWidgetProvider实际上就是一个BroadcastReceiver,要继承以下的函数:onReceive(Context, Intent)onUpdate(Context , AppWidgetManager, int[] appWidgetIds)onEnabled(Context)onDeleted(Context, int[] appWidgetIds)onDisabled(Context)Example.java:import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.content.Intent;public class Example extends AppWidgetProvider {@Overridepublic void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stubsuper.onDeleted(context, appWidgetIds);}@Overridepublic void onDisabled(Context context) {// TODO Auto-generated method stubsuper.onDisabled(context);}@Overridepublic void onEnabled(Context context) {// TODO Auto-generated method stubsuper.onEnabled(context);}@Overridepublic void onReceive(Context context, Intent intent) { // TODO Auto-generated method stubsuper.onReceive(context, intent);}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onUpdate(context, appWidgetManager, appWidgetIds);}}5.Activity类,什么事都可以不做AppWidgetActivity.java:import android.app.Activity;import android.os.Bundle;public class AppWidgetActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);}}6.我们前面说了,AppWidgetProvider实际上就是一个BroadcastReceiver;那我们在前面学BroadcastReceiver的时候,是不是要在AndroidManifest.xml中声明一个Receiver。

Android之窗口小部件详解--AppWidget

Android之窗口小部件详解--AppWidget

Android之窗⼝⼩部件详解--AppWidgetAndroid 之窗⼝⼩部件详解--App Widget版本号说明作者⽇期1.0 添加App Widge介绍和⽰例2013/06/271 App Widget简介App Widget是应⽤程序窗⼝⼩部件(Widget)是微型的应⽤程序视图,它可以被嵌⼊到其它应⽤程序中(⽐如桌⾯)并接收周期性的更新。

你可以通过⼀个App Widget Provider来发布⼀个Widget。

本⽂参考,先介绍App Widget的主要组件,然后再以⽰例来详细说明。

2 App Widget主要的相关类介绍2.1 AppWidgetProvider继承⾃ BroadcastReceiver,它能接收 widget 相关的⼴播,例如 widget 的更新、删除、开启和禁⽤等。

AppWidgetProvider中的⼴播处理函数如下:onUpdate()当 widget 更新时被执⾏。

同样,当⽤户⾸次添加 widget 时,onUpdate() 也会被调⽤,这样 widget 就能进⾏必要的设置⼯作(如果需要的话) 。

但是,如果定义了 widget 的 configure属性(即android:config,后⾯会介绍),那么当⽤户⾸次添加 widget 时,onUpdate()不会被调⽤;之后更新 widget 时,onUpdate才会被调⽤。

onAppWidgetOptionsChanged()当 widget 被初次添加或者当 widget 的⼤⼩被改变时,执⾏onAppWidgetOptionsChanged()。

你可以在该函数中,根据 widget 的⼤⼩来显⽰/隐藏某些内容。

可以通过 getAppWidgetOptions() 来返回 Bundle 对象以读取 widget 的⼤⼩信息,Bundle中包括以下信息:OPTION_APPWIDGET_MIN_WIDTH -- 包含 widget 当前宽度的下限,以dp为单位。

【Android开发API】应用组成部分-窗口小部件 - App Widgets

【Android开发API】应用组成部分-窗口小部件 - App Widgets

负责⼈:ˋ◇Aduil ﹎原文地址:/guide/topics/appwidgets/index.htmlApp Widgets 是⼀个应用程序的⼩视图,可以嵌⼊到其他应用程序(如主屏幕)并且能够定期更新。

你可以发布⼀个应用程序的App Widget ,而这些视图称为窗⼝的用户界面。

⼀个应用程序里,可以支持其他应用程序的AppWidgets 称为App Widget 的主机。

下面的截图是显示音乐的App Widget 。

该文档将介绍如何在应用程序里发布使用App Widget 。

基础知识-The Basics要创建⼀个App Widget ,您需要了解以下⼏点:AppWidgetProviderInfo 对象:描述了⼀个App Widget 的元数据,如在App Widget 的布局,更新频率,和AppWidgetProvider 类。

都应在XML 中定义。

AppWidgetProvider 类的实现:定义⼀个基于广播事件与App Widget 的接⼝方法。

通过它,您将收到广播对App Widget 进行更新,启用,禁用和删除。

视图布局:在XML 中初步定义App Widget 布局。

此外,还可以实现App Widget 可配置的* Activity * 。

当用户添加您的App Widget ,并允许他或她在创建时修改设置时启动这个可配置的Activity 。

以下各节描述如何设置这些组件。

Declaring an App Widget in the Manifest首先,在您的应用程序的AndroidManifest.xml 文件中声明* AppWidgetProvider * 类。

例如:1234567<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 >android :name 属性,在App Widget 中指定使用AppWidgetProvider 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android-App Widget入门指南来自Fgamers2011年4月9日963 次阅读评论(0)一、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 Activity2、准备好一个Widget的显示布局文件layout/widget.xml 内容如下:1 2 3 4 <?xml version="1.0"encoding="utf-8"?><linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent"android:orientation="vertical" xmlns:android="/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可以占用的屏幕长宽、更新频率,所显示的布局文件(就是上面的那个布局文件)等,其内容如下:1 2 3 4 5 6 7 8 9 <?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="/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文件中写了大量注释,方便你的理解。

内容如下:1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 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类型来决定自己处理还是分发给下面四个特殊的方法。

@Overridepublic void onReceive(Context context, Intent intent){383940414243444546474849Log.i("yao", "HelloWidgetProvider --> onReceive");super.onReceive(context, intent);}//如果Widget自动更新时间到了、或者其他会导致Widget发生变化的事件发生,或者说Intent的值是android.appwidget.action.APPWIDGET_UPDATE,那么会调用onUpdate,下面三个方法类似@Overridepublic 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从桌面上删除时调用@Overridepublic void onDeleted(Context context, int[] appWidgetIds){Log.i("yao", "HelloWidgetProvider --> onDeleted");super.onDeleted(context, appWidgetIds);}//当这个App Widget第一次被放在桌面上时调用(同一个App Widget可以被放在桌面上多次,所以会有这个说法)@Overridepublic void onEnabled(Context context){Log.i("yao", "HelloWidgetProvider --> onEnabled");super.onEnabled(context);}//当这个App Widget的最后一个实例被从桌面上移除时会调用该方法。

@Overridepublic void onDisabled(Context context){Log.i("yao", "HelloWidgetProvider --> onDisabled");super.onDisabled(context);}}5、配置AndroidManifest.xml文件,增加一个receiver标签,这个标签看起来很像前面讲的BroadReceiver的配置,具体内容如下:1 2 3 4 5 6 7 8 <?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="/apk/res/android" android:versionname="1.0"android:versioncode="1" package="basic.android.lesson35">91011121314151617<uses -sdk=""android:minsdkversion="7"><application android:icon="@drawable/icon" android:label="@string/app_name"><!-- receiver的android:name指向的是widget的请求处理器或者说请求接收者--><receiver android:label="Hello,App Widget" android:name=".HelloWidgetProvider"><intent -filter=""><!-- widget默认的事件action --><actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"></action> </intent><!-- widget元数据,name是写死的,resource指的是widget的配置文件--></receiver></application></uses></manifest>6、编译并运行程序,我们知道这种Widget程序,即使装完了也不会在程序列表中出现,因为它根本就没有main Activity,下面我给不清楚的同学说一下如何把一个widget放到桌面上:在模拟器上桌面上长按,等待弹出下面对话框,选择窗口小部件选择Hello,App Widget原文链接:/archives/date/2011/03/15 Tags:AndroidAndroid-AppsAndroid-WidgetAndroid入门。

相关文档
最新文档