初步分析Android——桌面小组件App Widget Host
来源:互联网 发布:做数据分析有前途吗 编辑:程序博客网 时间:2024/04/28 23:03
Android 应用都提供有这些小组件。App Widget 就是我们通常所说的桌面小组件。就是放置在手机屏幕上的例如始终,日历,天气等组件,与一般应用程序有所不同,应用需要点击查看,而App Widget不需要点击即直观呈现其内容,当然appwidget也可以被设置为点击打开应用或其他屏幕。桌面小组件是帮助我们快速访问应用的工具。
App Widget: 参考官方API 指南: 点击打开链接
应用程序小部件是微型应用程序视图,可以嵌入到其他应用程序(如主屏幕)中,并接收定期更新。这些视图在用户界面中称为Widget,您可以使用App Widget提供程序发布视图。能够容纳其他App Widget的应用程序组件被称为App Widget主机。即APP Widget Host。这个是官方的说法,简单来说就是一些放置在主屏幕中的微型视图,是可以定期更新的,几乎每台android 设备都有这种功能。
更新: AppWidget可以被定时更新,如日历每天更新,时钟每分钟更新等。当然,也可以在App Widget的视图界面中加入类似刷新的小按钮,以进行实时更新,如天气预报。 一般在提到Widget部件或Widget程序时,指的是AppWidget;如果说到widget控件,则可能是指视图控件,如Button等。
操作:
要创建一个App Widget,您需要以下内容:
(1)AppWidgetProviderInfo对象
(2)AppWidgetProvider 类
AppWidgetProviderInfo 对象:
描述App Widget的元数据,例如App Widget的布局,更新频率和AppWidgetProvider类。这应该在XML中定义。
<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>
注意:此处官方用了较为完整的写法,包括android:configure、android:resizeMode、android:widgetCategory。对于新手学习来说,不用这么麻烦,最简单的演示一遍。暂不涉及ExampleAppWidgetConfigure 类,此处定义example_appwidget_info.xml文件,只选择部分属性,最小宽度,最小高度,更新时间间隔,预览图片,指定初始化布局文件即可,这个布局文件自定义,example_appwidget.xml,简单地一个即可。
<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="100000" android:previewImage="@mipmap/ic_launcher" android:initialLayout="@layout/example_appwidget"></appwidget-provider>
example_appwidget.xml。这个布局文件中只用到TextView。
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/colorAccent" /> </LinearLayout></FrameLayout>
好了,改用的资源也有了,那现在可以告诉我这个<appwidget_provider></appwidget_provider>对应的xml文件有什么用了,包含appwidget基本信息的xml文件到底用在哪里?别急,看这里。。。。。。。。。。
AppWidgetProvider 类:桌面小组件提供者。利用这个类实现我们相关的功能,而AppWidgetProvider类需要在AndroidMainfest.xml文件中配置。
<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>
好了,这个是清单文件中的配置,指定 ExampleAppWidgetProvider ation即《meta-data》,而其中元数据对应的资源文件就是上文提到的appwidget_info.重点总结:定义一个appwidget 首先在清单文件中配置好,这样即指定了AppWidgetProvider这个工作的类,又指定了用到的资源布局example_appwidget_info.xml,那就继承AppWidgetProvider类创建一个子类,配置基本信息完成example_appwidget_info.xml文件,至于其中用到的布局自定义即可。
以上是桌面小组件最简单的应用,当然我们要学习的不至于此!
AppWidgetProvider是Android中提供的用于实现桌面小工具的类,其本质是一个广播即BroadcastReceiver。
是不是很难理解,明明是一个广播,但是偏偏起了个Provider的名称,没办法,这就是桌面小组件提供者,是不是很容易混淆ContentProvider。
AppWidgetProvider 继承自 BroadcastReceiver,它能接收 widget 相关的广播,例如 widget 的更新、删除、开启和禁用等。
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为单位。
OPTION_APPWIDGET_MIN_HEIGHT -- 包含 widget 当前高度的下限,以dp为单位。
OPTION_APPWIDGET_MAX_WIDTH -- 包含 widget 当前宽度的上限,以dp为单位。
OPTION_APPWIDGET_MAX_HEIGHT -- 包含 widget 当前高度的上限,以dp为单位。
onAppWidgetOptionsChanged() 是 Android 4.1 引入的。
onDeleted(Context, int[])
当 widget 被删除时被触发。
onEnabled(Context)
当第1个 widget 的实例被创建时触发。也就是说,如果用户对同一个 widget 增加了两次(两个实例),那么onEnabled()只会在第一次增加widget时触发。
onDisabled(Context)
当最后1个 widget 的实例被删除时触发。
onReceive(Context, Intent)
接收到任意广播时触发,并且会在上述的方法之前被调用。
总结,AppWidgetProvider 继承于 BroadcastReceiver。实际上,App Widge中的onUpdate()、onEnabled()、onDisabled()等方法都是在 onReceive()中调用的;是onReceive()对特定事情的响应函数。
需要注意的是系统默认的小工具布局中只支持以下这些标签,如果用了列表以外的标签,会导致小工具加载错误:
FrameLayout、
LinearLayout、RelativeLayout、GridLayout
AnalogClock、
Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipperListView、
GridView、StackView、AdapterViewFlipper
- 关于AppWidget以后会作很深入分析,不足之处多多纠正!!!!
- 初步分析Android——桌面小组件App Widget Host
- Android-Widget桌面小组件
- 【J】Android-Widget桌面小组件
- Android 使用Widget 添加桌面小组件
- 初识widget桌面小组件
- android widget小组件
- android桌面小组件(时钟)--widget初体验
- Android之Widget小组件
- android-App Widget Host
- Android App Widget初步
- 小组件widget
- Android桌面小组件:最简例子
- Android桌面小组件的命名空间
- Android 桌面小组件AppWidget的使用
- <Android>桌面小组件实现过程
- Android桌面小组件的使用
- Android 笔记 快捷方式 / 桌面小组件
- 安卓:App Widget应用程序小组件(一)
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- 从MVC到前后端分离(REST)
- HDU-1711 Number Sequence
- Linux中Kill进程的N种方法
- 打印1到最大的n位数
- 初步分析Android——桌面小组件App Widget Host
- qt中moc的作用 编译链接什么的
- jsp 里面的jstl标签截取两位小数点!
- SSAS Cube快速入门
- 回车键触发input渲染到ul的li中
- QT之qss教程- QRadioButton
- MySql数据库-11视图
- Android 中各个导入包详解
- 正则表达式思维导图,不再难懂