Android中Widget实例
来源:互联网 发布:腾讯云注册域名流程 编辑:程序博客网 时间:2024/05/17 22:08
应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。
为了创建一个Widget,需要AppWidgetProviderInfo与AppWidgetProvider。AppWidgetProviderInfo主要为Widget描述metadata,如Widget的布局,更新频率和AppWidgetProvider类,这在xml里面定义。AppWidgetProvider定义基本的方法允许你基于广播事件与Widget进行交互。通过它,当Widget更新,可用,不可用或者删除的时候,你将收到广播。
下面的截屏显示本实例的效果图:
此Widget很简单,就是以闹铃面板为背景,在上面显示字符串。
由于涉及的文件比较多,先看一下文件存放目录图:
注:在res/drawable-ldpi/加入背景资源图片。可以看到res下面有三个文件夹:drawable-hdpi,drawable-ldpi,drawable-mdpi.三个文件夹分别对应不同的屏幕分辨率。
- drawable-hdpi里面存放高分辨率的图片,如:WVGA (480x800),FWVGA (480x854)
- drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
- drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
为了使我们的程序满足不同分辨率的机型,Android在res下面分别建立不同文件夹,我们可以把不同分辨率机型的图片放在不同目录下面。
源代码如下:
首先,申明AppWidgetProvider类在应用的AndroidManifest.xml文件里 :
- AndroidManifest.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.test"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/clockgoog_dial" android:label="@string/app_name">
- <receiver android:name=".TestWidget"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
- </intent-filter>
- <meta-data android:name="android.appwidget.provider"
- android:resource="@xml/widget_provider"
- />
- </receiver>
- </application>
- <uses-sdk android:minSdkVersion="7" />
- </manifest>
注:<receiver>元素需要andriod:name属性,它指明被Widget使用的AppWidgetProvider.
<intent-filter>元素必须包含带有android:name属性的<action>元素。这一属性指明AppWigetProvider可接收ACTION_APPWIDGET_UPDATE广播。这是你必须明确声明的唯一广播。AppWidgetManager自动发送Widget广播到AppWidgetProvider。
<meta-data>元素指明AppWidgetProviderInfo资源,需要如下属性:
- android:name-指明元数据名称。使用android.appwidget.provider把数据指定为对AppWidgetProviderInfo的描述。
- android:resource-指明AppWidgetProviderInfo资源的位置。
其次,增加AppWidgetProviderInfor元数据在res/xml/widget_provider.xml中:
- res/xml/widget_provider.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="50dip"
- android:minHeight="50dip"
- android:updatePeriodMillis="10000"
- android:initialLayout="@layout/main"/>
注:AppWidgetProviderInfo定义基本的Widget属性,如最小布局维数,初始的布局资源,更新Widget频率和在创建时间启动Activity的配置。在XML资源里使用单一的<appwidget-provider>元素定义AppWidgetProviderInfo对象并且把它保存在工程的res/xml/文件夹下。
然后,创建Widget布局文件在res/layout/main.xml中:
- res/layout/main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/clockgoog_dial">
- <TextView
- android:id="@+id/textview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- android:textSize="10px"
- android:textColor="#ff0000"/>
- </LinearLayout>
注:你必须在XML里为你的Widget定义一个初始的布局文件,然后保存在工程的res/layout/目录下。如果你熟悉在XML中声明布局,那么创建Widget布局是简单的。你可以使用View对象设计你的Widget,然而你必须注意Widget基于RemoteViews,它并不支持布局或者view控件中的每一种。
最后,使用AppWidgetProvider类在TestWidget.java中:
注:继承于BroadcastReceiver的AppWidgetProvider类是一种很方便处理Widget广播的类。AppWidgetProvider只接收与Widget相关的事件广播,如当Widget更新,删除,可用和不可用的时候。当这些广播事件发生的时候,AppWidgetProvider收到如下的方法调用:onUpdated,onDeleted,onEnabled,onDisabled,onReceive。
最重要的AppWidgetProvider回调函数是onUpdated,因为当每一个Widget增加的时候它都会被调用(除非你使用配置Activity)。如果你的Widget接收任意用户交互事件,那么你需要在回调函数中注册事件handler。如果你的Widget没有创建临时文件或者数据库,或者执行需要clean-up的工作,那么onUpdated可能是你需要注册的唯一回调函数。
如果需要了解详细的Widget信息,请参考Android官方文档:file:///work/android-sdk-linux_x86-1.6_r1/docs/guide/topics/appwidgets/index.html。
- Android中Widget实例
- Android中Widget实例
- android widget 开发实例
- android widget 开发实例
- android widget开发实例
- android widget 开发实例
- android widget实例
- Android的Widget编写实例
- 解析Android Widget开发实例
- Android Widget实例代码解析
- Android App Widget开发实例
- android 中widget组件
- android之App Widget开发实例
- Android之App Widget开发实例
- Android Widget 实例(世界杯倒计时)
- android用户界面之Widget教程实例汇总
- android用户界面之Widget教程实例汇总
- android用户界面之Widget教程实例汇总
- 题1003、1004、1005
- x86\x64\ia64 的区别
- C++ string 字符串详解
- 在html中显示本地图片
- explicit关键字
- Android中Widget实例
- UISearchBar和UISearchDispalyController的详细使用
- cci-Q2.5 寻找环形链表的起点
- 注解学习
- The Uncertainty Of C/C++
- win32 sdk下调用webbrowser控件
- ORACLE 在线重建临时表空间
- getContextPath、getServletPath、getRequestURI的区别
- 表扫描的方式