AppWidget的使用(一)

39 篇文章 0 订阅

Android AppWidget桌面组件的使用

App Widget是一种可以被放在其他应用中(如Launcher)并接收周期性更新的应用视图。
这些视图在UI上就表现为Widget,并且你可以同App Widget Provider一起发布。

1.注册组件

<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>

2.添加App Widget 的元数据,及界面XML文件

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>  

此处的initialLayout表示要显示的Layout文件

3. 重写AppWidgetProvider中的相关方法

  • 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()发出。

编写在Mate数据中声明的布局文件

这里是一个线性布局,用作测试

<?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>

实现效果

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值