赞
踩
App Widget是一种可以被放在其他应用中(如Launcher)并接收周期性更新的应用视图。
这些视图在UI上就表现为Widget,并且你可以同App Widget Provider一起发布。
<receiver android:name="AppWidget">
<!-- 唯一需要显示声明的广播 -->
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
</intent-filter>
<!-- 此处表明引用的何处资源文件 -->
<meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget01" />
<!-- 接受自定义的广播 -->
<intent-filter>
<action android:name="com.qlf.appWidgetUpdate"></action>
</intent-filter>
</receiver>
AppWidgetProviderInfo定义了一个App Widget的必要属性
,例如最小布局范围、初始布局、更新频率、以及在创建时显示的配置Activity(可选)。
minHeight和minWidth表示widget所需的最小布局区域
由于主屏的布局方向是可变的,你应该考虑最坏的情况(每单元的宽和高都是74dp)。
然而,为了防止在扩展时产生整数计算错误,你还需要减去2。
因此,你可以用以下公式来计算最小宽度和高度(单位dp):(单元数量×74)-2。
AppWidget的宽度和高度不能超过4 * 4 个单元
updatePeriodMillis属性定义了App
Widget框架调用AppWidgetProvider的onUpdate方法的频率。
对于实际的更新,我们不建议采用该值进行实时处理。
最好是越不频繁越好——为了保证电量,一小时不超过一次为好。当然,你也可以允许用户对更新频率进行设置。
linitialLayout属性标识了初始布局文件。
configure属性定义了当用户添加App Widget时调用的Activity。(这是可选的)
previewImage定义了App
Widget的缩略图,当用户从widget列表中选择时,显示的就是这张图。如果没设置,用户将看见的是你的应用的默认图标。
autoAdvanceViewId属性是在Android3.0引入的,用于标识需要被host(launcher)自动更新的widget的子视图。
resizeMode属性标识了widget重新布局的规则。
你可以使用该属性来让widget能够在水平、竖直、或两个方向上均可变化。
可用的值包括horizontal、vertical、none。
如果是想在两个方向上均能拉伸,可设置为horizontal|vertical,当然,需要Android3.1以上版本。
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"
android:updatePeriodMillis="86400000"
android:previewImage="@drawable/preview"
android:initialLayout="@layout/example_appwidget"
android:configure="com.example.android.ExampleAppWidgetConfigure"
android:resizeMode="horizontal|vertical">
</appwidget-provider>
onUpdate() 处理AppWidgetManager.ACTION_APPWIDGET_UPDATE广播。
该广播在需要AppWidgetProvider提供RemoteViews数据时,由AppWidgetService.sendUpdateIntentLocked()发出。
onDeleted() 处理AppWidgetManager.ACTION_APPWIDGET_DELETED广播。
该广播在有该AppWidgetProvider的实例被删除时,由AppWidgetService.deleteAppWidgetLocked()发出。
onEnabled() 处理AppWidgetManager.ACTION_APPWIDGET_ENABLED广播。
该广播在该AppWidgetProvider被实例化时,由AppWidgetService.sendEnableIntentLocked()发出。
onDisabled() 处理AppWidgetManager.ACTION_APPWIDGET_DISABLED广播。
该广播在该AppWidgetProvider的所有实例中的最后一个实例被删除时,由AppWidgetService.deleteAppWidgetLocked()发出。
这里是一个线性布局,用作测试
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#dddddd"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Hello Widget"
android:textColor="#111111" />
</LinearLayout>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。