AB资源网(www.xxab.cn)服务器导航站-找服务器商就上AB资源网
百度360必应搜狗本站头条
【本站公告】:本站互助计划,欢迎有活动的服务器商免费投稿,免费收录,最新收录会在首页展示! - 站长QQ:6502567
当前位置:网站首页 > 技术文档 > 正文

widget开发(widgets教程)

AB资源网 2023-04-22 22:33 96 浏览 0 评论

本文目录一览:

  • 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教程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

腾讯云

相关推荐

云主机FTP软件:高效传输与安全管理的一站式解决方案

在云计算时代,云主机已成为企业和个人用户托管应用和存储数据的首选。为了方便文件传输,FTP(文件传输协议)软件在云主机环境中扮演着重要角色。本文将详细介绍如何在云主机上配置和使用FTP软件...

云主机FP:引领未来计算,解锁无限可能

云主机FP(FloatingPoint)是指在云计算环境中,针对浮点运算性能进行优化的虚拟机实例。浮点运算在科学计算、工程模拟、金融建模、图形处理等领域中占据重要地位,因此云主机FP的设计和配置...

云主机ECS:解锁企业数字化转型的新引擎,高效、安全、灵活的云计算解决方案

云主机ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它允许用户在云端创建和管理虚拟机实例。ECS的核心优势在于其灵活性和可扩展性,能够满足各种规模和类型的业...

云主机D盘:解锁无限存储空间,轻松应对大数据挑战!

云主机是一种基于云计算技术的虚拟化服务器,它允许用户在云平台上创建、配置和管理虚拟机实例。在云主机中,磁盘分区是存储数据的关键部分,通常包括系统盘和数据盘。系统盘用于安装操作系统和运行应用...

云主机DNS解析:提升网站速度与稳定性的关键策略

云主机DNS(DomainNameSystem)是云计算环境中至关重要的一部分,它负责将域名转换为IP地址,从而使得用户能够通过易于记忆的域名访问云主机上的服务和应用。本文将深入探讨云主机DNS...

云主机C盘爆满?快速解决方法大揭秘,让你的服务器重获新生!

云主机C盘满了是一个常见但棘手的问题,尤其对于依赖云服务进行日常运营的企业和个人用户来说,这可能导致系统性能下降、应用程序崩溃,甚至数据丢失。本文将详细探讨云主机C盘满的原因、影响以及解决方法。...

云主机CPU选择指南:提升性能与效率的关键决策

在选择云主机的CPU时,用户需要考虑多个因素,以确保所选的CPU能够满足其应用的需求,同时优化成本效益。以下是一些关键点,帮助用户在云主机CPU选择过程中做出明智的决策。了解应用的性能需求...

云主机CPU性能大比拼:揭秘顶级云服务商的核心竞争力

云主机CPU是云计算环境中至关重要的组成部分,它直接影响着云服务的性能、稳定性和用户体验。CPU,即中央处理器,是计算机系统的核心,负责执行指令和处理数据。在云主机中,CPU的性能决定了虚...

云主机ASP:高效搭建动态网站,轻松实现业务扩展与性能优化

云主机ASP(ActiveServerPages)是一种在云环境中运行ASP应用程序的技术。ASP是一种由微软开发的动态网页技术,允许开发者使用VBScript或JScript等脚本语言编写服务...

云主机API:解锁无限可能,引领企业数字化转型新纪元

云主机API(ApplicationProgrammingInterface)是云计算服务提供商为用户提供的一种编程接口,允许开发者通过编程方式管理和操作云主机资源。这些API通常基于RESTf...

云主机99idc:高效稳定,轻松搭建您的专属云端空间,一键部署,畅享无限可能!

云主机99idc是一家专注于提供云计算服务的公司,其核心业务是为企业和个人用户提供高性能、高可靠性的云主机服务。随着数字化转型的加速,云计算已经成为企业IT基础设施的重要组成部分,而云主机99i...

云主机80端口:解锁无限可能,开启高效网络新时代!

云主机是一种基于云计算技术的虚拟化服务器,它通过互联网提供计算资源和服务。在云主机中,80端口是一个非常重要的端口,通常用于HTTP协议,即网页服务。本文将详细探讨云主机80端口的相关内容...

云主机403错误:解锁高效解决方案,提升网站性能与安全

云主机403错误是一个常见的网络问题,通常表示用户在尝试访问某个资源时被服务器拒绝。这种错误可能由多种原因引起,包括权限问题、配置错误、防火墙设置等。以下是关于云主机403错误的一些详细信...

云主机360:全方位云端解决方案,助力企业数字化转型无忧

云主机360是一种基于云计算技术的虚拟化服务器解决方案,它通过将物理服务器资源虚拟化,为用户提供灵活、高效、安全的计算服务。云主机360的核心优势在于其高度的可扩展性和弹性,用户可以根据业务需求...

云主机301:引领未来云计算的新纪元,高效稳定,助力企业数字化转型!

云主机301是一种常见的网络重定向状态码,通常用于指示用户请求的资源已被永久移动到新的URL。在云计算环境中,云主机301状态码的出现可能涉及到多种技术和管理策略,下面我们将详细探讨这一现象。...

取消回复欢迎 发表评论: