码迷,mamicode.com
首页 > 移动开发 > 详细

Android--常见控件--App Widget(一)

时间:2015-09-15 12:39:01      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

App Widget

把所有的控件都叫做widget,

1、什么是APP Widget

2、创建一个APP Widget

技术分享技术分享

        桌面上的控件。            快捷方式,文件夹,壁纸

和App Widget 相关的基本概念

1、AppWidgetProviderInfo对象:为App Widget提供元数据(描述数据的数据,关系型数据库的表结构也是元数据),包括布局,更新频率等等数据。这个对象被定义在XML文件中。

2、AppWidgetProvider:定义了App Widget的基本生命周期。

 

1、创建第一个App Widget的步骤

 下面来看看编写步骤 :

1.为AppWidget提供一个元文件布局AppWidgetProviderInfo,用来显示widget的界面,

2.创建一个WidgetProvider继承自AppWidgetProvider;

3.为 WidgetProvider创建一个布局文件也可以直接用main.xml;

代码部分:

1)提供 AppWidgetProviderInfo的布局文件 res/xml/example_appwidget_info.xml 

注意:这个布局文件放在的Layout里面的,是放在res/xml,自己创建XML。

 

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="40dp"
android:minHeight="40dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/example_appwidget_preview" android:initialLayout="@layout/new_app_widget" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen" android:initialKeyguardLayout="@layout/new_app_widget"> </appwidget-provider>
android:updatePeriodMillis  更新时间,以毫秒为单位。
android:initialKeyguardLayout 初始化的布局,引用一个布局文件,在Layout里面的。

2)为App Widget指定样式和布局:

定义一个新的布局文件example_appwidget.xml.这里只是一个简单的TextView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:padding="@dimen/widget_margin" android:background="#09C">
<TextView android:id="@+id/appwidget_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/appwidget_text" android:textColor="#ffffff" android:textSize="24sp" android:textStyle="bold|italic" android:layout_margin="8dp" android:contentDescription="@string/appwidget_text" android:background="#09C" /> </RelativeLayout>

 

3)实现AppWidgetProvider这个类

/**
 * Implementation of App Widget functionality.
 * 这就是个请求分发嘛。
 */
public class NewAppWidget extends AppWidgetProvider {
    //在到达指定的更新时间后或者是当用户像桌面添加App Widget时,会调用该方法。
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        // There may be multiple widgets active, so update all of them
        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++) {
            updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
        }
    }
    //当第一个App Widget的实力第一次被创建时,会调用该方法。
    @Override
    public void onEnabled(Context context) {
        // Enter relevant functionality for when the first widget is created
    }
    //当最后一个App Widget实例被删除时候,会调用该方法。
    @Override
    public void onDisabled(Context context) {
        // Enter relevant functionality for when the last widget is disabled
    }
    //当App widgt 被删除时,会调用该方法。
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
    }
    //接受广播事件。
    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId) {

        CharSequence widgetText = context.getString(R.string.appwidget_text);
        // Construct the RemoteViews object
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
        views.setTextViewText(R.id.appwidget_text, widgetText);

        // Instruct the widget manager to update the widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

 

4、注意这就是一个广播机制。在Mainifest.xml里面声明。

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

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

 

Android--常见控件--App Widget(一)

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4809757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!