WidgetAndroid开发Android知识

Android widget创建及点击事件

2017-12-12  本文已影响209人  daixa

1.如图所示,直接创建一个widget,一直下一步即可

widget

创建好后 会生成响应的布局xml文件

new_app_widget.xml

xml文件下会生成一个配置的文件

点开之后会看见一些配置,initiallayout指定引用的布局,previewImage是展示给调用者看的界面效果图片,直接引用即可,updatePeriodmillis是默认的界面更新时间,官方默认30分钟,当设置小于30分钟时候,自动转成30分钟,如果你要实时刷新,只能写到service里边

manifest里会生成一个receiver,

至此一个widget就生成了。如果你要手动生成一个,需要把这些文件都创建了,不能有遗漏。现在打开桌面小部件,就会看到一个你新建的widget

2.点击事件,我们可以看到大多数应用的app提供的widget都是可以点击互动的。接下来我们就开始写一下点击事件

2.1.我们先了解一个类PendingIntent

那么PendingIntent是什么?我的理解是可以让外部程序执行当前程序的意图。

因为PendingIntent持有当前app的context引用,所以,它与Intent的区别有,它可以在外部执行PendingIntent里面的Intent。

Intent是立即执行,PendingIntent不是立刻执行的。

2.2.如何使用PendingIntent?

可以通过PendingIntent.getActivity(Context context,int RequestCode,Intent intent,int flags),或者getBroadcast()、getService()去获取实例。

根据pending获取的实例,就是我们可以做的三个点击事件

2.3.1跳转activity

简单的一个线性布局

java代码如下图,新建一个RemoteViews ,这里调用settextViewText方法去更改了一下textview的值,创建一个PendingIntent 传入一个Intent和context

最关键的一步来了,就是绑定点击事件 setOnClickPendingIntent。传入id和pendingIntent,顾名思义,就是在点击这个View时候,执行之前准备好的intent

这是不带参数的时候,跳转activity

带参数的时候将PendingIntent的最后一个参数改成PendingIntent.FLAG_CANCEL_CURRENT

最后调用 appWidgetManager.updateAppWidget(appWidgetId,views);更新一下界面即可,每当我我们要改变界面的时候都不要忘了更新界面这句话。

2.3.2开启服务

代码和上边差不多。首先新建一个服务,这里就不说如何创建了,依旧是通过PendingIntent类的getService来获取一个服务的实例,然后绑定点击id

2.3.3发送按钮动作action

这次点击按钮我们发送一个动作,当然这要先在manifest注册动作

动作注册好了,我们将他打包发送过去

说一下如何接收 重写onrecevie方法,这里我通过判断动作改一下图片显示,首先还是新建remoteviews,调用更改图片资源的方法,最后更新一下界面,刚在updateAppWidget里我们直接调用更新即可,但是在外边如何调用?

//获得appwidget管理实例,用于管理appwidget以便进行更新操作

AppWidgetManagermanger=AppWidgetManager.getInstance(context);

// 相当于获得所有本程序创建的appwidget

ComponentNamethisName=newComponentName(context,NewAppWidget.class);

//更新widget

manger.updateAppWidget(thisName,remoteViews);

现在我们就更新好了,可以运行一下试试了

总结:通过这一篇文章我学会了创建一个widget,和点击事件。快去给你得应用也填上widget试试吧 下次我们讲讲如何自己编写一个app动态读取别人提供的widget。

代码地址 github.com/daixa/WidgetCreate/tree/master/MyClickWidget

上一篇下一篇

猜你喜欢

热点阅读