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

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>
时间: 2024-11-13 09:43:12

Android--常见控件--App Widget(一)的相关文章

Android常见控件初探

温故而知新.最近复习了一些android常用控件,接下来,根据android 官方API,总结一下它们的一些常见用法.(开发测试环境为Android4.4) 一.TextView 由官方的关系图可以看出,TextView继承View类,直接子类有Button,CheckedTextView等,间接子类有AutoCompleteTextView, CheckBox等. 下面列举一些TextView常见的xml属性: android:text TextView显示的文字 android:textCo

QT+常见控件+tab Widget 和Stacked Widget

首先:这里介绍以下tab Widget 和Stacked Widget 之间的区别和使用的方法: tab Widget控件可以直接的进行切换,Stacked Widget却不可以直接在界面上进行切换,需要第三方的控件来进行支持(按钮).Stacked Widget的具体使用方法如下图: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QCo

Android常见控件— — —AlertDialog

package com.example.uiwidgettest2; import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.view.View;import android.widget.*; public class AlertDialogActivity extends A

Android常见控件— — —Button

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

Android常见控件— — —EditText

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_hei

Android常见控件— — —TextView

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

ArcGIS for Android地图控件的5大常见操作

原文地址: ArcGIS for Android地图控件的5大常见操作 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/7801467   GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS Runtime SDK for

【ALearning】第三章 Android基本常见控件

本章主要介绍基本的平常较多使用的控件,包括TextView.EditView.ImageView.Button等.本章将介绍相关控件基本属性的使用,为以后章节的进阶学习提供基础.案例中引用的LinearLayout布局,可先不必深究,后续章节将会详细介绍. TextView TextView控件的基本属性,android:layout_width 布局宽度android:layout_height 布局高度.这两个属性参数是必须的. TextView 中android:layout_width与

Android 标签控件

版本:1.0 日期:2014.7.24 版权:© 2014 kince 转载注明出处 在有的应用中可能需要设置一些标签来方便用去去查询某些信息,比如手机助手或者购物软件之类都会有一些标签.对于软件开发初期来说,直接使用TextView.Button实现是最为简单的一种方式.但是这种方法也有其局限性,比如不能控制换行.耦合性低等缺点.所以除了解决这些问题之外,最好能够封装一个类库出来,方便以后使用. 首先新建一个Tag类, import java.io.Serializable; public c