当前位置:   article > 正文

AppWidget的使用(一)_appwidget autoadvanceviewid

appwidget autoadvanceviewid

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

此处的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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

实现效果

这里写图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/313218
推荐阅读
相关标签
  

闽ICP备14008679号