博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Widget
阅读量:4081 次
发布时间:2019-05-25

本文共 3914 字,大约阅读时间需要 13 分钟。

一、是什么

一个桌面插件

二、如何使用

从一个小Demo来做起:

1、在AndroidManifest中声明 App Widget
2、在xml目录定义 App Widget的初始化xml文件
3、实现Widget具体布局的Layout xml
4、继承APPWidgetProvider类,实现具体的Widget业务逻辑。

实现步骤:

1、新建一个类TestWidet继承AppWidgetProvider;
再在AndroidManifest里注册

intent-filter中过滤了APPWIDGET_UPDATE事件,这个事件是由系统触发的更新事件,每个widget必须包含这个事件;meta-data标签描述的是widget的配置文件指向,该文件描述了widget的一些基本信息。

2、定义resource(定义配置文件)

在这里定义 layout、最小宽高度、在Widget里的背景、更新时间等。

3、layout_widget布局文件

4、具体的Widget业务逻辑(onReceive方法和onUpdate方法)

package com.example.chenjinhua.myapplication;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.graphics.Color;import android.text.TextUtils;import android.util.Log;import android.widget.RemoteViews;/** * Created by chenjinhua on 16/3/26. */public class TestWidget extends AppWidgetProvider {
public static final String WIDGET_BUTTON_ACTION = "widget_button_action"; @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if ( intent != null && TextUtils.equals(intent.getAction(),WIDGET_BUTTON_ACTION)){ Log.i("WIDGET_BUTTON_ACTION", "be clicked"); /* * 设置组件的变化 * */ //必须重新new一遍RemoteViews,不然RemoteViews不会更新的。 RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.layout_widget); remoteViews.setTextViewText(R.id.widget_textView,"be clicked"); remoteViews.setTextColor(R.id.widget_textView, Color.BLUE); /* * 更新组件 * */ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); //获取组件的名字 ComponentName componentName = new ComponentName(context,TestWidget.class); appWidgetManager.updateAppWidget(componentName,remoteViews); } } /* 当程序初始化时会调用onUpdate方法 * */ @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); //远程视图,把布局文件读出来,读成一个remoteViews的界面 /* * 1、在RemoteViews的构造函数中,通过传入layout文件的id来获取 “layout文件对应的视图(RemoteViews)"; * 2、然后,调用RemoteViews中的方法能对layout中的组件进行设置; * 3、可以调用setOnClickPendingIntent() 来设置Button的点击响应事件 * */ RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.layout_widget); Intent intent = new Intent(); //广播发给TestWidget.class本身,它本身可在onReceive方法里接收。 intent.setClass(context,TestWidget.class); intent.setAction(WIDGET_BUTTON_ACTION); PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent,0); remoteViews.setOnClickPendingIntent(R.id.widget_button,pendingIntent); //更新视图,告诉它我们做了这件事情 appWidgetManager.updateAppWidget(appWidgetIds,remoteViews); }}

Tips

1、 RemoteViews

顾名思义,它是一个远程视图。App Widget中的视图,都是通过RemoteViews表现的。 在RemoteViews的构造函数中,通过传入layout文件的id来获取 “layout文件对应的视图(RemoteViews)”;然后,调用RemoteViews中的方法能对layout中的组件进行设置(例如,可以调用setTextViewText()来设置TextView组件的文本,可以调用setOnClickPendingIntent() 来设置Button的点击响应事件)。因此,我们可以将 “RemoteViews 看作是 layout文件中所包含的全部视图的集合”。

2、更新AppWidget界面

(1)、如果是在onUpdate()方法内更新AppWidget界面

eg: appWidgetManager.updateAppWidget(appWidgetIds, ActivityView);
(2)、如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量
eg: public RemoteViews views; //RemoteView对象
public ComponentName thisWidget; //组件名
public AppWidgetManager manager; // AppWidget管理器

thisWidget = new ComponentName(this, PictureAppWidgetProvider.class); manager = AppWidgetManager.getInstance(this); manager.updateAppWidget(thisWidget, views);

其他:

1、与service通信

2、Widget控件的交互方法
3、如何做一个桌面播放器Widget

转载地址:http://weani.baihongyu.com/

你可能感兴趣的文章
cell上label的背景颜色在选中状态下改变的解决办法
查看>>
GPS定位
查看>>
地图、显示用户位置、大头针
查看>>
自定义大头针
查看>>
UIButton添加block点击事件
查看>>
利用runtime给类别添加属性
查看>>
本地推送
查看>>
FMDB的使用
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
TableDnd(JQuery表格拖拽控件)应用进阶
查看>>
[转]开源中最好的Web开发的资源
查看>>
java接口不能实例化原因浅谈
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
Java8 Lambda表达式介绍
查看>>