安卓的Widget是一个满好玩儿的特性,但是Widget本身的功能一直都比较弱,在安卓3.x做了些增强,4.x又引入了锁屏Widget等新的功能。典型的Widget有入口型,展示型,独立型这几种。
上面的Google+和豆瓣说就是入口型的,微薄应该是展示型的,而下图的豆瓣电台的可以算是独立型的Widget。
Widget所占的空间是以格子数来计算的,从1x1到4x4格的空间不等。一个格子的大小是:竖屏80x100,横屏106x74。
上图左边解释了Widget的Box结构。右边是格子和最小高宽的对应关系。另外在平板下最大可以是8X7格子;而3.1开始会自动缩放,最小高宽就是默认高宽;4.0开始布局时会满足最小高宽下的最少格
//在res/xml/widget_larget.xml里声明provider <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:updatePeriodMillis="0" //widget的更新间隔,0是不定时更新,而是等待广播更新 android:initialLayout="@layout/widget_large" //对应的布局 android:previewImage="@drawable/widget_large_preview" //在Widget列表的预览图 android:minWidth="290dp" android:minHeight="290dp" > </appwidget-provider> //在manifest里面声明对应的receiver <receiver android:name="WidgetLarge" android:label="@string/widget_large"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <intent-filter> <action android:name="com.rock.android.intent.WIDGET"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_large"/> </receiver>
其他的部分,就只是在receiver里面处理Widget的更新,设置对应的控件而已了。