微信小程序> AppWidget解析

AppWidget解析

浏览量:4678 时间: 来源:qq_22934077

什么是AppWidget

  AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图:

          小程序      小程序

  图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。典型的程序有时钟、天气、音乐播放器等。AppWidget 是Android 系统应用开发层面的一部分,有着特殊用途,使用得当的化,的确会为app 增色不少,它的工作原理是把一个进程的控件嵌入到别外一个进程的窗口里的一种方法。长按桌面空白处,会出现一个 AppWidget 的文件夹,在里面找到相应的 AppWidget ,长按拖出,即可将 AppWidget 添加到桌面,

 

如何开发AppWidget

  AppWidget 是通过 BroadCastReceiver 的形式进行控制的,开发 AppWidget 的主要类为 AppWidgetProvider, 该类继承自 BroadCastReceiver。为了实现桌面小部件,开发者只要开发一个继承自 AppWidgetProvider 的子类,并重写它的 onUpdate() 方法即可。重写该方法,一般来说可按如下几个步骤进行:

  1、创建一个 RemoteViews 对象,这个对象加载时指定了桌面小部件的界面布局文件。

  2、设置 RemoteViews 创建时加载的布局文件中各个元素的属性。

  3、创建一个 ComponentName 对象

  4、调用 AppWidgetManager 更新桌面小部件。

 

  下面来看一个实际的例子,用 Android Studio 自动生成的例子来说。(注:我用的是最新版的 AS 2.2.3,下面简称 AS。)

  新建了一个 HelloWorld 项目,然后新建一个 AppWidget ,命名为 MyAppWidgetProvider,按默认下一步,就完成了一个最简单的AppWidget的开发。运行程序之后,将小部件添加到桌面。操作步骤和默认效果如下:

  小程序  小程序

  

  我们看看 AS 为我们自动生成了哪些代码呢?对照着上面说的的步骤我们来看看。

  首先,有一个 MyAppWidgetProvider 的类。

package com.example.joy.remoteviewstest;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.widget.RemoteViews;/** * Implementation of App Widget functionality. */public class MyAppWidgetProvider extends AppWidgetProvider {    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.my_app_widget_provider);        views.setTextViewText(R.id.appwidget_text, widgetText);        // Instruct the widget manager to update the widget        appWidgetManager.updateAppWidget(appWidgetId, views);    }    @Override    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {        // There may be multiple widgets active, so update all of them        for (int appWidgetId : appWidgetIds) {            updateAppWidget(context, appWidgetManager, appWidgetId);        }    }    @Override    public void onEnabled(Context context) {        // Enter relevant functionality for when the first widget is created    }    @Override    public void onDisabled(Context context) {        // Enter relevant functionality for when the last widget is disabled    }}
该类继承自 AppWidgetProvider ,AS默认帮我们重写 onUpdate() 方法,遍历 appWidgetIds, 调用了 updateAppWidget() 方法。再看 updateAppWidget() 方法,很简单,只有四行:

  第一行, CharSequence widgetText = context.getString(R.string.appwidget_text);

     声明了一个字符串;

  第二行, RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget_provider);

    创建了一个 RemoteViews 对象,第一个参数传应用程序包名,第二个参数指定了,RemoteViews 加载的布局文件。这一行对应上面步骤中说的第一点。可以看到在 res/layout/ 目录下面 AS 自动生成了一个 my_app_widget_provider.xml 文件,内容如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_/>







版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎