海外主机测评

您现在的位置是:首页 > 服务器 > 正文

服务器

widget开发widgets教程

cds8202023-03-16服务器110
本文目录一览:1、Android桌面小部件AppWidget开发2、iOS14Widget小组件开发(WidgetExtension)3、iOS14Widget小组件开发实践

本文目录一览:

  • 1、Android桌面小部件AppWidget开发
  • 2、iOS14 Widget小组件开发(Widget ExtensiON)
  • 3、iOS14 Widget小组件开发实践3——Widget点击交互
  • 4、iOS14 Widget小组件开发实践5——网络图片的加载

Android桌面小部件AppWidget开发

在Android我们经常可以看到各种桌面小部件,比如时钟、天气、音乐播放器等等。我们可以使用AppWidgetProvider来实现小部件的开发。

开发一个桌面小部件的步骤:

在res/layout/下新建一个布局文件,名称和内容自定义,看你想把小工具做成什么样。需要注意的是系统默认的小工具布局中只支持以下这些标签,如果用了列表以外的标签,会导致小工具加载错误:

比如,我们创建了一个名为widget_layout.xml的布局文件:

定义小部件的配置信息需要在res目录下新建一个xml目录,然后在res/xml/目录下创建一个配置文件,配置文件名称随意。新建app_widget_provider_info.xml:

上面的参数意义很明确,initialLayout指小部件的初始化布局,一般与最终布局相同;minHeight和minWidth定义了小部件的最小宽高,与小部件所占网格大小有关;previewImage可以指定在添加小部件时看到的预览图;updatePeriodMillis指定了小部件的自动更新周期,单位为毫秒。

其中minHeight和minWidth的定义可以参考官方文档:

OK,小部件完成了,运行一下看看效果:

iOS14 Widget小组件开发(Widget Extension)

File - New - Target - Widget Extension

本文主要以 未勾选 用户配置属性的情况说明

为小组件展示提供一切必要信息的结构体,遵守 TimelineProvider 协议,产生一个时间线,告诉 WidgetKit 何时渲染与刷新 Widget,时间线包含一个你定义的自定义TimelineEntry类型。时间线条目标识了你希望WidgetKit更新Widget内容的日期。在自定义类型中包含你的Widget的视图需要渲染的属性。

Timeline的刷新策略是会延迟的,并不一定根据你设定的时间精确刷新。同时官方说明了每个widget窗口小部件每天接收的刷新都会有数量限制

TimelineProvider官方解释

渲染 Widget 所需的 数据模型 ,需要遵守 TimelineEntry 协议。

屏幕上 Widget 显示的内容,可以针对不同尺寸的 Widget 设置不同的 View。

一个Widget只能实现大中小三个不同尺寸的组件形式,如果现有需求要做不同功能并且相同尺寸规格的组件则需要实现多组件

1.通过修改原Widget入口文件方法添加更多配置来支持多个Widget

2.另建SwiftUI文件实现组件功能,并去除 @main ,修改相同函数名

并在Widget页面中 Entry 中绑定对应的模型

如果主APP用的swift编写,可以将网络请求模块文件共享或pods库共享(方法后文会介绍)

posterFromJson 此数据模型转换方法仅适用简易接口(为了偷懒?♀️),复杂数据模型还是用 HandyJSON 或 KaKaJson 解析

若用第三方模型转换方法,图片的同步请求处理放置于 getTodayPoster 的请求中同步处理即可

然后更新补全 placeholder getSnapshot Previews 处相应的 Entry 即完成Widget内容展示

点击Widget窗口唤起APP进行交互指定跳转支持两种方式:

Widget三种尺寸规格中

接收方式

APPDelegate 中接收返回的URL

如果项目实现了 SceneDelegate 则需要在 SceneDelegate 里面实现跳转处理

由于widget跟APP间相互独立,如果想用相同的数据则需要两者间数据共享,创建 App Group

主APP中 Target - Signing Capability - +Capability - 添加 App Group

ps:网上说的还需创建申请 APPID 但在开启自动管理 Automatically manage signing 的情况下xcode会自动给你创建相关联的APPID

两者间的数据共享主要通过 UserDefaults 和 FileManager 两种形式。

以OC中使用 UserDefaults 共享数据为例

oc、swift混编调用

完成后即可使用pods中的第三方SDK了

Pods第三方SDK使用错误提示

如果在pods导入共享第三方库,或者使用 [UIApplication sharedApplication] 方法报错如下时

则需要在 pods Target 里面,选中出错的SDK并点击 buildSettings 搜索 Require

然后把 Require Only App-Extension-Safe API 然后把YES改为 NO 即可

iOS14 Widget小组件开发实践3——Widget点击交互

根据官方文档的描述,点击 Widget 窗口唤起 APP 进行交互指定跳转支持两种方式:

Widget 支持三种显示方式,分别是 systemSmall 、 systemMedium 、 systemLarge ,其中:

1、 systemSmall 只能用 widgetURL 修饰符实现URL传递接收。

2、 systemMedium 、 systemLarge 可以用 Link 或者 widgetUrl 处理

这两种方式的本质都是 URL Schemes

在查找资料的时候,看到网上有的地方说在 AppDelegate 实现 OpenUrl 进行跳转处理:

然而试了之后发现根本没有响应,其实是需要在 SceneDelegate 里面实现跳转处理,因为 iOS13 后, APP 的 UI 生命周期交由 SceneDelegate 管理,这里拿到需要的 URL ,就能处理产品需求实现了。

creating-a-widget-extension

iOS13 URL Schemes 跳转与传值问题

iOS14 Widget小组件开发实践5——网络图片的加载

以上都是使用 Image 加载本地图片资源,但是 SwiftUI 中的 Image 没有提供直接加载 URL 方式的图片显示,那么如何在 SwiftUI 中让 Image 加载网络图片呢,可以采用异步加载网络图片数据,由 data 转换成 UIimage ,再给 Image 展示

但是这种异步加载图片的方式在 Widget 中却失效了, Image 显示不了图片。

在 TimelineProvider 的 getTimeline 中 completion(timeline) 执行完之后,不再支持图片的异步回调了,所以必须在数据请求回来的处理中采用同步方式,将图片的 data 获取,转换成 UIimage ,在赋值给 Image 展示。

接下里给 iOS14 Widget小组件开发实践2——自定义Widget 里搭建的古诗视图增加一个网络封面图片显示,效果如下:

因为这个免费的 API 接口没有返回图片封面数据,所以就自己网上找个图片用来测试。关于图片请求的时机,这里我是将它放在了 API 接口回调后处理 json 转 model 的这一步:

最后在给 PoetryWidgetView 布局界面:

SwitUI-实现URL图片显示

关于widget开发和widgets教程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~