Android 桌面部件

桌面部件是一种利用AppWidget框架将应用程序的某个部件放在桌面。
技术分享

技术分享

 res/layout/digitalclock.xml

Xml代码 技术分享 技术分享技术分享
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/time"  
  4.     android:textSize="45px"  
  5.     android:textStyle="bold"  
  6.     android:textColor="#FFFFFFFF"  
  7.     android:background="@drawable/bg"  
  8.     android:layout_width="wrap_content"  
  9.     android:layout_height="wrap_content" />  
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/time"
    android:textSize="45px"
    android:textStyle="bold"
    android:textColor="#FFFFFFFF"
    android:background="@drawable/bg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

 res/xml/est_appwidget.xml

Xml代码 技术分享 技术分享技术分享
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:minWidth="146dip"  
  4.     android:minHeight="72dip"  
  5.     android:updatePeriodMillis="1000"  
  6.     android:initialLayout="@layout/digitalclock" />  
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="146dip"
    android:minHeight="72dip"
    android:updatePeriodMillis="1000"
    android:initialLayout="@layout/digitalclock" />

 AndroidManifest.xml

Xml代码 技术分享 技术分享技术分享
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.studio.android.chp10.ex4"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon"   
  7.                  android:label="@string/app_name">  
  8.         <receiver android:name="ESTTime"   
  9.                   android:label="@string/app_name">  
  10.             <intent-filter>  
  11.                 <action   
  12.                     android:name=  
  13.                         "android.appwidget.action.APPWIDGET_UPDATE" />  
  14.             </intent-filter>  
  15.             <meta-data android:name="android.appwidget.provider"   
  16.                 android:resource="@xml/est_appwidget" />  
  17.         </receiver>  
  18.         <service android:name=".ESTTime$UpdateService" />  
  19.     </application>  
  20.     <uses-sdk android:minSdkVersion="3" />  
  21. </manifest>   
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.studio.android.chp10.ex4"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" 
                 android:label="@string/app_name">
        <receiver android:name="ESTTime" 
                  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/est_appwidget" />
        </receiver>
        <service android:name=".ESTTime$UpdateService" />
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest> 

 

Java代码 技术分享 技术分享技术分享
  1. import android.app.Service;  
  2. import android.appwidget.AppWidgetManager;  
  3. import android.appwidget.AppWidgetProvider;  
  4. import android.content.ComponentName;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.os.IBinder;  
  8. import android.text.format.Time;  
  9. import android.widget.RemoteViews;  
  10.   
  11. public class ESTTime extends AppWidgetProvider {  
  12.     @Override  
  13.     public void onUpdate(Context context,   
  14.             AppWidgetManager appWidgetManager,int[] appWidgetIds) {  
  15.         context.startService(new Intent(context,UpdateService.class));  
  16.     }  
  17.   
  18.     public static class UpdateService extends Service {  
  19.         @Override  
  20.         public void onStart(Intent intent, int startId) {  
  21.             Time estTime = new Time("EST");  
  22.             estTime.setToNow();  
  23.             //传入所在包包名和布局文件  
  24.             RemoteViews updateViews = new RemoteViews(getPackageName(),R.layout.digitalclock);  
  25.             updateViews.setTextViewText(R.id.time,  
  26.                     estTime.format("%H:%M"));  
  27.               
  28.             ComponentName thisWidget =   
  29.                 new ComponentName(this, ESTTime.class);  
  30.             AppWidgetManager manager =   
  31.                 AppWidgetManager.getInstance(this);  
  32.             manager.updateAppWidget(thisWidget, updateViews);  
  33.         }  
  34.   
  35.         @Override  
  36.         public IBinder onBind(Intent intent) {  
  37.             return null;  
  38.         }  
  39.     }  
  40. }  
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.text.format.Time;
import android.widget.RemoteViews;

public class ESTTime extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, 
            AppWidgetManager appWidgetManager,int[] appWidgetIds) {
        context.startService(new Intent(context,UpdateService.class));
    }

    public static class UpdateService extends Service {
        @Override
        public void onStart(Intent intent, int startId) {
            Time estTime = new Time("EST");
            estTime.setToNow();
            //传入所在包包名和布局文件
            RemoteViews updateViews = new RemoteViews(getPackageName(),R.layout.digitalclock);
            updateViews.setTextViewText(R.id.time,
                    estTime.format("%H:%M"));
            
            ComponentName thisWidget = 
                new ComponentName(this, ESTTime.class);
            AppWidgetManager manager = 
                AppWidgetManager.getInstance(this);
            manager.updateAppWidget(thisWidget, updateViews);
        }

        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
}

 

 ESTTime.rar

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。