Android Widget设计

Android Widget设计步骤:

1.写布局文件

布局文件里存放要放入的view.但是目前对于widget的布局文件有限制!不是所有的组件都能够使用的。容器类视图目前只支持四种:LinearLayout,RelativeLaout,Fra
meLayout,GridLayout.容器类目前支持的视图组件有:AnalogClock 模拟时钟oMeter 电子时钟、计时oMeter 电子时钟、计时器,Button,ImageButton,Image
View,ViewFIlpper等.上述视图的子类视图以及所有的自定义视图全都不能用.
<?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="wrap_content"
    android:orientation="horizontal" >
    <TextView
            android:id="@+id/tv_widget_name"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="平凡之路"
            android:textSize="14sp" />
 </LinearLayout>

2.写一个描述文件用来描述widget的一些属性

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

updatePeriodMillis : 系统会按照该时间间隔,通过发送系统广播的方式,来更新Widget的显示内容。发送的系统广播的action是android.appwidget.action.APP
WIDGET_UPDATE,widget一旦受到该广播,会调用onUpdate方法。

updatePeriodMillis : 指定的时间间隔不得低于30分钟所对应的毫秒值。低于该值,则设定无效,系统依然会每隔半小时发送一次广播。

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="250dp"
    android:minHeight="40dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/widget_layout"
     >
</appwidget-provider>

3.自己定义一个类,继承自AppWidgetProvider类

其中要重写五个方法:
onReceive:用来收广播

onEnable:当前仅当,第一个Widget被拖到桌面上的时候,该方法会被调用。在第一个widget被拖到到桌面的时候,系统会发送系统广播,onReceive方法收到该广播后会调用onEnable方法。

onUpdate:当Widget被拖动桌面上,该方法都会被调用一次。widget被拖到到桌面的时候,系统会发送系统广播,onReceive方法收到该广播后会调用onUpdate方法。然后,每隔updatePerioidMillis时间,系统还会发送一次系统广播,该方法依然会被调用一次。

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

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

可以根据自己的需要,把要实现的方法写入这五个方法中

4.在AndroidManifest文件中,注册刚写好的类

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

 <intent-filter>
 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
 </intent-filter>

同时还必须声明一个标签:

 <meta-data 
android:name="android.appwidget.provider"
android:resource="@xml/mywidget"
/>

有该标签才能说明,这是一个Widget而不是一个BroadcastReceiver

<receiver 
            android:name="com.example.musicplayer.MyWidget"
            >
            <intent-filter >
               <action android:name="com.tarena.ACTION_UPDATE_MUSIC_PLAYING"/> 
            </intent-filter>
            <meta-data 
                android:name="android.appwidget.provider"
                android:resource="@xml/mywidget"
                />
        </receiver>

完成这些之后,安装在测试机上,就能在widget界面上找到刚写的这个widget了,长按拉到桌面上就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值