Android中的小组件(widget)的写法

在安卓中完成一个小组件一般分为以下几步来写:

1)写布局文件

在res下为widget写一个布局文件,此布局文件与一般的布局文件无区别,但需要注意以下几点:
对于widget的布局文件有限制!不是所有的组件都能够使用的。   
容器类视图目前只支持四种:LinearLayout,RelativeLayout,FrameLayout,GridLayout
容器类目前支持的视图组件:
AnalogClock 模拟时钟
ChronoMeter 电子时钟、计时器
Button
ImageButton
TextView
ImageView
ViewFlipper
等(随着SDK版本的迭代,可支持的视图数量在增加)


不能用的:自定义视图一概不能用(View)
          上述可用视图的子类一概不能用          (比如EditText)


2)写一个描述文件,用来描述widget的一些属性
有四个属性必须声明:
minWidht/minHeight:小组件拖动到屏幕上之后,系统会根据你指定的这两个值估算会占用多少格。
屏幕上会被系统划分为4*4个格子,每个格子具体尺寸,根据屏幕尺寸和密度的不同会有所
差异。
Google早期给出了一个minWidth/minHeight的经验计算公式:70*n-30 dp


在高密度大尺寸屏幕下还有一个经验公式:74*n-2   dp




updatePeriodMillis 系统会按照该时间间隔,通过发送系统广播的方式,来更新Widget的显示内容。发送的系统广播的action是android.appwidget.action.APPWIDGET_UPDATE,widget一旦受到该广播,会调用onUpdate方法。
updatePeriodMillis指定的时间间隔不得低于30分钟所对应的毫秒值。低于该值,则设定无效,系统依然会每隔半小时发送一次广播。

在res下新建一个文件夹,命名为xml,在该文件夹下创建一个xml类型的appwidget-provider文件,在xml文件中必须写上以下四个属性

代码实现可如下:


    android:initialLayout="@layout/widget_layout"
    android:minHeight="40dp"
    android:minWidth="250dp"
    android:updatePeriodMillis="86400000" >

3)写一个类,继承自AppWidgetProvider类
5个方法:
onReceive:用来收广播
onEnable:当前仅当,第一个Widget被拖到桌面上的时候,该方法会被调用。在第一个widget被拖到到桌面的时候,系统会发送系统广播,onReceive方法收到该广播后会调用onEnable方法。
onUpdate:当Widget被拖动桌面上,该方法都会被调用一次。widget被拖到到桌面的时候,
系统会发送系统广播,onReceive方法收到该广播后会调用onUpdate方法。然后,每隔updatePerioidMillis时间,系统还会发送一次系统广播,该方法依然会被调用一次。




onDeleted:当一个Widget从桌面上被删除的时候,该Widget的onDeleted方法会被调用。


onDisable:当且仅当最后一个Widget从桌面上删除的时候,该Widget除了onDeleted方法会被调用之外,它的onDisable方法也会被调用






4)在AndroidManifest文件中,“注册”第3步写好的类


注册时使用的标签是
需要至少指明1个可以接收的广播action
 
 
 

同时还必须声明一个标签:
  android:name="android.appwidget.provider"
android:resource="@xml/mywidget"
/>
有该标签才能说明,这是一个Widget而不是一个BroadcastReceiver

代码实现可如下:

            android:name="com.myapp.musicplayer.widget.MyWidget"
            >
           
               
               
               
                myapp
.ACTION_UPDATE_WIDGET_INFO"/>
               
                myapp.ACTION_HIDE_WIDGET_PAUSE"/>
               
                myapp.ACTION_UPDATE_MUSIC_PLAYING"/>
           
                            android:name="android.appwidget.provider"
                android:resource="@xml/mywidget"
                />
       

你可能感兴趣的:(安卓开发)