AppWidget---mars第二季第5集

怎么这篇文章被C博客审核后,排版就变成这样的垃圾了。。。。哭

参考资料链接

http://blog.csdn.net/y13872888163/article/details/6346723

http://www.cnblogs.com/skywang12345/p/3158310.html-----写的非常系统非常好,膜拜

http://www.cnblogs.com/skywang12345/archive/2013/06/14/index.html


1、在res下新建一个xml文件夹,写个appwidget_info.xml描述一个App Widget元数据,比如App Widget的布局,更新频率,指定在home中显示样式的布局文件。这个应该在XML里定义。

<?xml version="1.0" encoding="UTF-8"?>
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="50dp"
    android:minHeight="50dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/widget_layout"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen|keyguard"
    android:previewImage="@drawable/dingdangcat"
    />
<!-- android:updatePeriodMillis="86400000"是设置更新时间,86400000毫秒是一天
     android:initialLayout="@layout/widget_layout"是引用的布局文件
     
minWidth 和minHeight 
    它们指定了App Widget布局需要的最小区域,缺省的App Widgets所在窗口的桌面位置基于有确定高度和宽度的单元网格中。如果App Widget的最小长度或宽度和这些网格单元的尺寸不匹配,那么这个App Widget将上舍入(上舍入即取比该值大的最接近的整数——译者注)到最接近的单元尺寸。
 注意:app widget的最小尺寸,不建议比 “4x4” 个单元格要大。关于app widget的尺寸,后面在详细说明。
               
previewImage 
     指定预览图,该预览图在用户选择 widget 时出现,如果没有提供,则会显示应用的图标。这个图标是在widget中显示的,在Home中显示的图片在layout中定义
resizeMode  
    指定了 widget 的调整尺寸的规则。可取的值有: "horizontal", "vertical", "none"。"horizontal"意味着widget可以水平拉伸,“vertical”意味着widget可以竖值拉伸,“none”意味着widget不能拉伸;默认值是"none"。Android 3.1 引入。
   
initialLayout
     指定在Home中显示的样式的布局文件
下面几个还未尝试 autoAdvanceViewId 指定一个子view ID,表明该子 view 会自动更新。在 Android 3.0 中引入。widgetCategory 指定了 widget 能显示的地方:能否显示在 home Screen 或 lock screen 或 两者都可以。它的取值包括:"home_screen" 和 "keyguard"。Android 4.2 引入。initialKeyguardLayout 指向 widget 位于 lockscreen 中的布局资源文件。Android 4.2 引入。-->





2、在res下layout中新建widget_layout.xml,用于指定显示在Home上的样式

<?xml version="1.0" encoding="utf-8"?>

<!-- 设置widget在home中显示的样式 -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
<TextView 
    android:id="@+id/widgetTextId"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="myfirstAppwidget"
    android:background="#000000"
    />
 <ImageView
        android:id="@+id/iv_show"
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content" 
        android:src="@drawable/doctor"   //在Home中显示的图标
        android:layout_gravity="center"/> 
</LinearLayout>

3、在AndroidManifest.xml中声明

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.s02_05_appwidget"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.s02_05_appwidget.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="ExampleAppWidgetProvider">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                   android:resource="@xml/appwidget_info"/>
        </receiver>
    </application>

</manifest>


说明:

(01) ExampleAppWidgetProvider是继承于的AppWidgetProvider类,用来响应widget的添加、删除、更新等操作。

(02) android.appwidget.action.APPWIDGET_UPDATE,必须要显示声明的action!因为所有的widget的广播都是通过它来发送的;要接收widget的添加、删除等广播,就必须包含它。

(03) <meta-data> 指定了 AppWidgetProviderInfo 对应的资源文件    android:name -- 指定metadata名,通过android.appwidget.provider来辨别data   

(04) android:resource -- 指定 AppWidgetProviderInfo 对应的资源路径。即,xml/example_appwidget_info.xml

4、实现AppWidgetProvider的类,

src中新建ExampleAppWidgetProvider.java,继承AppWidgetProvider,实现其中的方法

package com.example.s02_05_appwidget;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;

public class ExampleAppWidgetProvider extends AppWidgetProvider{
	@Override
	//
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		System.out.println("onUpdate每次更新调用");
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}
	
	@Override
	//
	public void onDeleted(Context context, int[] appWidgetIds) {
		// TODO Auto-generated method stub
		System.out.println("onDeleted每次删除调用");
		super.onDeleted(context, appWidgetIds);
	}
	
	@Override
	//
	public void onDisabled(Context context) {
		// TODO Auto-generated method stub
		System.out.println("onDisabled最后一个删除调用");
		super.onDisabled(context);
	}
	
	@Override
	//
	public void onEnabled(Context context) {
		// TODO Auto-generated method stub
		System.out.println("OnEnabled第一次创建调用");
		super.onEnabled(context);
	}

}

遗留问题-----OnDisabled,和OnEnabled的功能没有实现,悲剧
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值