解析Android Widget设计与开发(1)

解析Android Widget设计与开发(1)
 


    Android Widget设计与开发是本文要介绍的内容,最早Widget是指在PC的桌面上的小窗口程序;Web上的先行者似乎是Yahoo!;当然,OPhone也搞了一套Widget,HTML+CSS的东东。

    我们这里谈的所谓Widget,就是窗口小部件,Android SDK从1.5版本开始支持AppWidget framework,返个框架允许开发者开发Widgets,这些Widgets可以被用户通过长按桌面进行添加,与应用程序进行数据交互。

    需求:

    在桌面上开发一个Widget,可以实时显示IM软件的状态更新变化;可以通过左右按钮,查看上次或下调更新内容。

    (参考效果图)

    Android Widget设计与开发

    设计思路:

    (参考设计序列图)

    Android Widget设计与开发

    代码:

    Java:

       
       
    1. /src/org.anymobile.demo.Globals \\Intent.action 声明  
    2.  
    3.  /src/org.anymobile.demo.service.UpdateService extends Service \\同步、更新Widget布局数据的Service  
    4.  
    5.  /src/org.anymobile.demo.widget.UpdateAppWidgetProvider extends AppWidgetProvider \\Widget,接收器 

    XML:

       
       
    1. /res/layout/update_appwidget.xml \\布局设计  
    2. /res/values/strings.xml \\常量声明  
    3. /res/xml/update_appwidget_info.xml \\app widget定义  
    4. AndroidManifest.xml 

    #AndroidManifest.xml

       
       
    1. <?xml version="1.0" encoding="utf-8"?>     
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"     
    3.       package="org.anymobile.demo"     
    4.       android:versionCode="1"     
    5.       android:versionName="1.0">     
    6.     <application android:icon="@drawable/icon" android:label="@string/app_name">     
    7.              
    8.         <receiver android:name=".widget.UpdateAppWidgetProvider"     
    9.                   android:label="@string/app_widget_label" >     
    10.             <intent-filter>     
    11.                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />     
    12.             </intent-filter>     
    13.             <meta-data android:name="android.appwidget.provider"      
    14.                        android:resource="@xml/update_appwidget_info" />     
    15.         </receiver>     
    16.              
    17.         <service android:name=".service.UpdateService"  android:label="@string/app_name">     
    18.             <intent-filter>     
    19.                 <action android:name="org.anymobile.demo.service.IMM_UPDATE_SERVICE" />     
    20.                 <category android:name="android.intent.category.DEFAULT" />     
    21.             </intent-filter>     
    22.         </service>     
    23.     </application>     
    24. </manifest>     

    #strings.xml

       
       
    1. <?xml version="1.0" encoding="utf-8"?>     
    2. <resources>     
    3.     <string name="app_name">AnymobileDemo</string>     
    4.          
    5.     <string name="app_widget_label">AnymobileDemo Widget</string>     
    6.     <string name="app_widget_title">Updates</string>     
    7.     <string name="app_widget_error_message">No messages, please check to login.</string>     
    8. </resources>    

    #update_appwidget_info.xml

       
       
    1. <?xml version="1.0" encoding="utf-8"?>     
    2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"     
    3.     android:minWidth="294dip"     
    4.     android:minHeight="120dip"     
    5.     android:updatePeriodMillis="0"     
    6.     android:initialLayout="@layout/update_appwidget">     
    7. </appwidget-provider>    

    #update_appwidget.xml

       
       
    1. <?xml version="1.0" encoding="UTF-8"?>     
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
    3.     android:orientation="vertical"      
    4.     android:layout_width="fill_parent"      
    5.     android:layout_height="fill_parent">     
    6.     <LinearLayout      
    7.         android:id="@+id/app_widget_top"      
    8.         android:gravity="center_vertical"     
    9.         android:orientation="horizontal"      
    10.         android:background="@drawable/widget_titlebar"      
    11.         android:layout_width="fill_parent"      
    12.         android:layout_height="wrap_content">     
    13.     </LinearLayout>    
       
       
    1.     <LinearLayout      
    2.         android:id="@+id/app_widget_body"      
    3.         android:orientation="horizontal"      
    4.         android:background="@drawable/widget_body"      
    5.         android:layout_width="fill_parent"      
    6.         android:layout_height="100dip">     
    7.        <LinearLayout      
    8.             android:id="@+id/app_widget_message"      
    9.             android:layout_width="fill_parent"      
    10.             android:layout_height="fill_parent">     
    11.             <TextView     
    12.                 android:id="@+id/widget_message"     
    13.                 android:text="@string/app_widget_error_message"     
    14.                 android:paddingRight="5dip"     
    15.                 android:paddingLeft="5dip"     
    16.                 android:layout_width="wrap_content"     
    17.                 android:layout_height="wrap_content">     
    18.             </TextView>     
    19.         </LinearLayout>     
    20.     </LinearLayout>     
    21.          
    22.     <LinearLayout     
    23.         android:id="@+id/app_widget_bottom"     
    24.         android:gravity="right"     
    25.         android:layout_width="fill_parent"     
    26.         android:layout_height="wrap_content">     
    27.     </LinearLayout>     
    28. </LinearLayout>    

    #Globals.java

    package org.anymobile.demo;  

       
       
    1. public final class Globals     
    2. {     
    3.     public static final String ACTION_APP_WIDGET_SERVICE"org.anymobile.demo.service.IMM_UPDATE_SERVICE";     
    4.          
    5.     public static final String ACTION_APP_WIDGET_PREV   = "org.anymobile.demo.intent.action.APP_WIDGET_PREV";     
    6.     public static final String ACTION_APP_WIDGET_NEXT   = "org.anymobile.demo.intent.action.APP_WIDGET_NEXT";     
    7.          
    8.     public static final String ACTION_APP_WIDGET_RELOAD = "org.anymobile.demo.intent.action.APP_WIDGET_RELOAD";  }    
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值