Widget 桌面小控件

widget介绍

App widget 是可以被嵌入到其它应用程序中的窗口小部件。

流程

  • 创建类继承AppWidgetProvider
  • layout中创建widget布局文件
  • res目录下创建xml文件夹,创建并初始化根节点为AppWidgetProvider的配置文件
  • 在清单文件中声明第一步继承AppWidgetProvider的类文件,同时配置第三步创建的配置文件
  • 在自定义的AppWidgetProvider中实现业务逻辑

创建AppWidgetProvider子类

AppWidgetProvider继承 BroadcastReceiver 能够接收相关的广播:widget的更新,删除,开启,禁用等.同时也可以接受自定义的广播.

onUpdate()

widget更新时被调用

同样当用户首次添加widget时,该方法也会被调用.但是如果定义了widgetconfigure属性那么第一次添加时该方法不会被调用,只有当widget更新时才会被调用.

onDeleted(Context, int[])

widget被删除时该方法被调用

onEnabled(Context)

当第一个widget的实例被添加时会触发该方法.

一个应用可以有多个不同尺寸的widget,一个widget可以被添加多次.这里主要针对第二点,该方法对于同一个widget只有在第一次添加时才被调用.

onDisabled(Context)

该方法和onEnabled ()方法对应,当最后一个widget被删除时该方法被调用.

onReceive(Context, Intent)

当收到在配置文件中注册的广播时,该方法会被回调

总结

AppWidgetProvider继承自BroadcastReceiver. 实质上AppWidgetProvider中的onUpdate``onDeleted``onEnabled``onDisabled``onReceive等方法都是在父类方法的onReceive方法中回调的:
这里写图片描述
这里写图片描述

设计布局

布局的设计就直接根据设计稿完成即可

xml文件夹下的配置文件

AppWidgetProviderInfo 描述app widget 元数据,比如布局,更新频率,预览图等信息.

<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|keyguard"
  android:initialKeyguardLayout="@layout/example_keyguard">
</appwidget-provider>

minWidth 和minHeight

它们指定了App Widget布局需要的最小区域。

缺省的App Widgets所在窗口的桌面位置基于有确定高度和宽度的单元网格中。如果App Widget的最小长度或宽度和这些网格单元的尺寸不匹配,那么这个App Widget将上舍入到最接近的单元尺寸。单元格的尺寸是由所使用的launcher决定的。粗略计算可以参考下面这个表格:

单元格格数(行/列)对应的大小(dp)
140dp
2110dp
3180dp
4250dp
n70*n-30

updatePeriodMillis

它定义了 widget 的更新频率。实际的更新时机不一定是精确的按照这个时间发生的。

previewImage

指定预览图,该预览图在用户选择 widget 时出现,如果没有提供,则会显示应用的图标。该字段对应在 AndroidManifest.xml 中 receiver 的 android:previewImage 字段。由 Android 3.0 引入。

initialLayout

指向 widget 的布局资源文件

configure

可选属性,定义了 widget 的配置 Activity。如果定义了该项,那么当 widget 创建时,会自动启动该 Activity。

resizeMode

指定了 widget 的调整尺寸的规则。可取的值有: “horizontal”, “vertical”, “none”。”horizontal”意味着widget可以水平拉伸,“vertical”意味着widget可以竖值拉伸,“none”意味着widget不能拉伸;默认值是”none”。Android 3.1 引入

widgetCategory

指定了 widget 能显示的地方:能否显示在 home Screen 或 lock screen 或 两者都可以。它的取值包括:”home_screen” 和 “keyguard”。Android 4.2 引入。

initialKeyguardLayout

指向 widget 位于 lockscreen 中的布局资源文件。Android 4.2 引入。

清单文件中配置

<receiver android:name=".ExampleAppWidgetProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="com.skywang.widget.UPDATE_ALL"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/example_appwidget_info" />
        </receiver>
  • ExampleAppWidgetProvider是继承于的AppWidgetProvider类,用来响应widget的添加、删除、更新等操作
  • android.appwidget.action.APPWIDGET_UPDATE,必须要显示声明的action!因为所有的widget的广播都是通过它来发送的;要接收widget的添加、删除等广播,就必须包含它
  • action android:name=”com.skywang.widget.UPDATE_ALL,自定义的广播
  • 指定了 AppWidgetProviderInfo 对应的资源文件
    android:name – 指定metadata名,通过android.appwidget.provider来辨别data。
    android:resource – 指定 AppWidgetProviderInfo 对应的资源路径。即,xml/example_appwidget_info.xml

App Widget支持的布局和控件

  • App Widget支持的布局

    FrameLayout

    LinearLayout

    RelativeLayout

    GridLayout

  • App Widget支持的控件

    AnalogClock

    Button

    Chronometer

    ImageButton

    ImageView

    ProgressBar

    TextView

    ViewFlipper

    ListView

    GridView

    StackView

    AdapterViewFlipper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值