创建 widget 窗口小组件

随着android的手机屏幕越来越大,为了丰富屏幕内容 app widget(窗口小组件)被越来越多的应用所使用。app widget 有什么好处呢?它可以在不启动应用程序的情况下,让用户在屏幕上有一块交互窗口和程序入口点。

这是我手机自带的天气预报app widget效果。

为了创建一个应用程序的widget我们需要创建三个组件:

(1)给widget创建一个布局资源。

res/layout/nview.xml

<?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:orientation="horizontal" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开网页" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开照相机" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开电话本" />

</LinearLayout>

Widget的布局不是支持所有Android组件的。目前仅支持一下组件。

FrameLayout 
LinearLayout 
RelativeLayout

AnalogClock 
Button 
Chronmeter 
ImageButton 
ImageView 
ProgressBar 
TextView

如果使用了weidget不支持的组件。那么在Widget创建时会导致android.view.InflateExceptionn异常

(2)创建widget描述文件。该文件是xml类型。位于res/xml中

res/xml/my_widget.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/nview"
    android:minHeight="40dp"
    android:minWidth="200dp"
    android:previewImage="@drawable/ic_launcher"
    android:resizeMode="horizontal|vertical"
    android:configure="com.example.testdemo.MainActivity"
    android:updatePeriodMillis="360000" >

</appwidget-provider>

appwidget-provider标签能够描述widget元数据。该元数据使用以下属性来描述weiget

initialLayout: widget的布局资源。

minWidth/minHeight: widget的最小宽度和最小高度。

resizeMode: (这个属性是在Android 3.1中引入的)通过给resizeMode设置horizontal和vertical的组合,允许在你指定的方向上调整widget的大小,设置为none会禁止调整大小。

lable: 小组件标题,在小组件列表中能看到。

updatePeriodMillis: widget更新最小周期,单位毫秒。Android将会以该设定的时间唤醒设备,来更新主屏幕上的widget,这个时间周期不能小于30分钟。最好每天更新一到两次

icon: 你的widget 在小组件管理器中的图标。你可以指定icon为你的weiget的缩略图。方便用户了解你的widget样子。

configure:当widget添加到屏幕中时,可以启动一个Activity,该Acitvity可以对widget进行设置,该属性必须使用Activity的完全限定名,如上代码中的。

perviewImage: (Android3.0中引入的)设置widget在小组件管理器中的预览效果。而不是显示其图标icon。其实这个和icon差不多。最好还是用这个。

(3)创建一个继承于AppWidgetProvider的Intent接受类,AppWidgetProvider封装了对Intent的处理,并提供了更新,删除,启用,禁用等事件的处理程序,在该类中我们可以从服务器端获得数据并进行处理并在Widget中显示等。

package com.example.testdemo;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;

public class MyAppWidget extends AppWidgetProvider {

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        // Widget组件被删除时触发
        super.onDeleted(context, appWidgetIds);
    }

    @Override
    public void onDisabled(Context context) {
        // 最后一个Widget组件关闭时触发
        super.onDisabled(context);
    }

    @Override
    public void onEnabled(Context context) {
        // 第一个Widget组件启动时触发
        super.onEnabled(context);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // 没接收一次广播消息就调用一次,使用频繁,不管什么操作都最先触发该函数
        super.onReceive(context, intent);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // 当更新widget时调用
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
}

(4)向AndroidManifest.xml中注册

  <receiver android:name=".MyAppWidget" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/my_widget" >
            </meta-data>
        </receiver>

注意:使用的是Receiver标签,为了把一个broadcaset Receiver 指定为一个 app widget。需要添加以下两个标签。

1.一个用于"android.appwidget.action.APPWDIGET_UPDATE" 动作的intent filter。

2.一个对描述文件widget的xml引用。这个文件描述了widget的设置。

更多属性参加Android api

创建 widget 窗口小组件

时间: 2024-08-05 23:11:57

创建 widget 窗口小组件的相关文章

在Android 窗口小组件(Widget)中显示(StackView,ListView,GridView)集合View

在Android 3.0 中引入了 Collection View Widget.用于在窗口小组件中添加了对集合View 的支持. 如下: (1)StackView 一个卡片View,以层叠的方式显示其子View. (2)ListView 和传统的ListView一样 (3)GridView 网格列表.具体用法和传统的一样. 第一步:创建Widget布局文件    (1)Wdiget的布局文件 路径:res/layout/my_widget_layout.xml <?xml version=&quo

Android Widget窗口小部件

1.<meta-data>为组建提供名值对 <meta-data android:name="string" android:resource="resource specification" android:value="string" /> 可定义在<activity><activity-alias> <service><receiver>中 一个组件可包含任意多个<

Android 之窗口小部件详解--App Widget

1 App Widget简介 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget Provider来发布一个Widget. 本文参考Android官方文本,先介绍App Widget的主要组件,然后再以示例来详细说明. 2 App Widget主要的相关类介绍 2.1 AppWidgetProvider AppWidgetProvider 继承自 BroadcastRecei

Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去

在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 RemoteViews 去管理Widget的中GridView.ListView.StackView等内容.在学习本篇之前,建议读者先掌握 App Widget 的基本知识. 1 RemoteViews等相关类的介绍 下面先简单介绍RemoteViews.RemoteViewsService.RemoteV

Android开发工程师文集-1 小时学会Widget小组件开发

前言 大家好,给大家带来Android开发工程师文集-1 小时学会Widget小组件开发的概述,希望你们喜欢 学会用Widget (小组件) Widget小组件很方便,很快捷,可以个性化,自己定制,相关功能,可以实时更新最新内容. Widget布局,Widget配置,AppWidgetProvider与Configuration Activity Android Widget xml布局类型:AppWidget Provider <appwidget-provider xmlns:android

Android开发5:应用程序窗口小部件App Widgets的实现

前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我们简单说一下Widget是一个啥玩意~ 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widge

Android开发指南-窗口小部件(App Widgets)

http://blog.csdn.net/iefreer/article/details/4626274# 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widget宿主.下面的截屏显示了一个音乐App Widget. 这篇文章描述了如何使用App Wi

Writing Your Own Widget(自定义组件)

英文地址:http://dojotoolkit.org/reference-guide/1.10/quickstart/writingWidgets.html#quickstart-writingwidgets 从头单独开发一个控件十分困难,我们提供有一些组件,你如果想修改他们或者扩展一个自己的组件,这是毫无问题的. Dijit的组件具有可扩展性,修改组件时你没有必要熟读源代码.很多时候,你只需要通过设定组件的属性达到自己想要的目标,例如:滑块儿长度默认为0-100,你可以设定属性0-200达到

Magento 2 创建 Widget

Widget是一个更好的工具,可以将内容插入或编辑到CMS页面块或页面中. 什么是小部件? 小部件是Magento 2配置中的强大功能.作为商店管理员,您可以利用小部件来改善生动界面下的店面.小部件允许显示静态信息或动态内容营销.我想说明一些Magento小部件的实现,例如: 动态产品数据 最近查看的产品的动态列表 促销横幅 交互式导航元素和动作块 插入内容页面的动态Flash元素 如何在Magento 2中创建小部件? 在Magento 2中创建小部件的概述 第1步:声明小部件 第2步:创建窗