首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无障碍功能框架:如何让残疾老龄群体更好使用微信?

框架简介 框架将多种不同的无障碍需求的实现进行封装,抽象成不同的规则。 业务侧可以将一个 页面/业务 的无障碍需求,在一个配置类里使用规则表达出来,再由框架去进行处理。实现相应的效果。...问题难点 一般会选择直接修改padding,有些甚至需要改动相应布局,但这样的改动工作量太大且容易影响原来视图布局。 解决方案 需要一个全局的热区补足机制,将过小热区补足至规范。 2....具体实现 在「创建View的统一入口」去设置 TouchDelegate 代理,由父View作为TouchDelegate的承载View去代理Touch事件,这里有三个问题需要解决: 如何找到合适的承载...当前 View 够大了就没必要再往上冒了 但是这样会存在问题:子View的Click优先级高于父View的TouchDelegate。...或者是列表的 “会说话的” 顶层视图(满足->6 不满足->7)列表(ListView/RecycleView)的顶层视图例子如下: 但是聚焦的前提是 “会说话的”,“会说话的” 包括以下几个条件:

1.8K41

藏在微信里的温度,无障碍开发框架分享

微信作为国民级应用,实现无障碍迫在眉睫。为了帮助他们更好地使用微信 App,Android微信完成了适老化及无障碍改造。...问题难点 一般会选择直接修改 padding,有些甚至需要改动相应布局,但这样的改动工作量太大且容易影响原来视图布局。 解决方案 需要一个全局的热区补足机制,将过小热区补足至规范。...4.2 具体实现 在「创建 View 的统一入口」去设置 TouchDelegate 代理,由父 View 作为TouchDelegate 的承载 View 去代理 Touch 事件,这里有几个问题需要解决...但是这样会存在问题:子 View 的 Click优先级高于父View的TouchDelegate。事件派发机制: 从父 View 往子 View 派发,从子 View 向上处理。...5、检查该节点是否 clickable/longClickable/focusable 或者是列表的“会说话的” 顶层视图(满足->6 不满足->7)列表(ListView/RecycleView)的顶层视图例子如下

2.3K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用 SwiftUI 的 Eager Grids

    此外,Group 视图本身没有提供任何布局,也没有任何自己的几何图形。所有布局都由其父级执行:HStack。...,视图会适应父级提供的大小。...在这种情况下,父级是网格。通常,列与其中最宽的单元格一样宽。在下面的示例中,橙色列的宽度由第二行中最宽的单元格决定。身高也是如此。在示例中,第二行与行中最高的紫色单元格一样高。...如您所知,没有框架修饰符的形状喜欢增长以填充父级提供的所有空间。在这种情况下,网格将增长以填充其父级提供的所有空间。 在下面的示例中,绿色单元格在其水平维度上不受限制,因此它使用了所有可用空间。...如果 Grid 在 GridRow 容器之外有一个视图,则它被用作跨越所有列的单个单元格行。

    4.4K20

    AngularJS Scope 的概念、特性和用法

    本文将详细介绍 AngularJS Scope 的概念、特性和用法,并提供一些示例帮助读者更好地理解和应用。什么是 Scope?...每个 Scope 都有一个父级 Scope,最顶层的 Scope 称为根级 Scope。这种层级结构使得数据可以在不同的控制器和视图之间共享。...创建 ScopeAngularJS 会自动为每个应用创建一个根级 Scope。除此之外,我们还可以在控制器中创建新的 Scope。...这样,name 变量就可以在视图中使用。Scope 的继承Scope 之间存在继承关系,子级 Scope 继承了父级 Scope 的属性和方法。这种继承使得数据可以在不同层级的控制器和视图中共享。...$emit 方法会向父级 Scope 发送事件,而 $broadcast 方法会向子级 Scope 发送事件。

    22020

    vue与react的数据绑定

    单项绑定(例:react):顾名思义,就是将model值绑定至视图层,更新model时自动更新视图。 双向绑定(例:vue):用户在视图层操作数据的同时,model也被更新了。...vue3中已经将双向绑定使用Proxy重写,解决了当年vue2不能监听数组变化的苦恼,同时也提升了效率。...除此之外,handler共有十三种劫持方式,比如deleteProperty就是用于劫持域删除。...所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级prop 的更新会向下流动到子组件中,但是反过来则不行。...这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。 当然,你在平时开发的时候真的是数据一层一层的从model流到layout到业务组件的吗?

    1.1K10

    CVPR 2018 | 中科大&微软提出立体神经风格迁移模型,可用于3D视频风格化

    本文提出了第一个用于快速立体风格转换的前馈网络。除了广泛使用的风格损失函数 [13,19] 之外,作者还引入了一个附加的视差一致性损失,用它来惩罚风格化结果在非遮挡区域的偏差。...考虑到视差一致性和时间连贯性,本文通过集成一个附加的子网络把该方法扩展到了立体视频的风格转换上。 本文的剩余部分将首先总结一些相关的工作。...这两个子网络被集成在一个特征级中间域中,使左视图和右视图完全对称。...我们首先仔细检验了将现有的分别应用于立体图像的左视图和右视图的单目风格转换方法,表明在最终的风格化结果中不能很好地保持原始的视差一致性,这给观看者造成了 3D 疲劳。...为了得到实用的实时性解决方案,我们提出了第一个前馈网络:它联合训练一个风格化子网络和一个视差子网络,并将它们集成在一个特征级的中间域中。

    1.1K80

    SwiftUI 布局协议 - Part 1

    在这 120pt 中,文本只需要 74,并传达给父视图,父视图现在可以拿走多余的 46pt 给其他的子视图用。因为其他子视图是图形,所以它们可以接收给它们的一切东西。...,当我们写这个方法我们应该认为我们既是父视图又是子视图:当作为父视图时需要询问子视图的尺寸,当我们是子视图时,要基于我们子视图的回复告诉父视图需要的尺寸, 这个方法将会收到建议尺寸,一个子视图代理的合集和一个缓存....frame(width: , height: ) .layoutPriority() } LayoutValueKey 自定义值:LayoutValueKey 不建议将布局优先级用于优先级以外的内容...一个视图可以拥有不同间距,如果旁边是文本视图和旁边是图像间距是不一样的。除此之外,每个边缘都会有自己的偏好。 所以我们应该如何用 SimpleHStack 让它们行为一致?...那是因为视图会识别标识并且维护, SwiftUI 将这个行为认为是视图的改变,而不是两个单独的视图。

    3.3K10

    前端工程师的vue面试题笔记

    在这里可以进行一次性的初始化设置。2. inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。...2.2 TeleportTeleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,就有点像哆啦A梦的“任意门”在vue2中...vue 的开发模型扩展到其他平台我们可以将其生成在canvas画布上图片关于createRenderer,我们了解下基本使用,就不展开讲述了import { createRenderer } from...prop 都使得其父子之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。...这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。另外,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。

    68730

    Vue 组件插槽:父子组件间的内容分发和插槽作用域

    默认内容 Vue 还支持为插槽定义默认渲染内容,这样,即便父级作用域没有定义要分发的内容,也可以通过默认的内容进行渲染(如果父级作用域定义了要分发的内容,则会覆盖插槽中的默认内容): # 视图部分 之外,我们还可以在父级作用域获取组件插槽中的动态数据,从而通过条件过滤实现内容的动态渲染,你可以将其理解为在父级作用域引用带有动态数据的插槽,那如何在父级作用域中调用组件插槽中的数据呢?...languages 数据,将每一个列表项通过插槽转发给父级作用域定义渲染的内容(这里指定了默认的内容,即 {{ language }},如果父级作用域中没有定义分发的内容,则使用默认内容渲染),另外,...我们还在 slot 标签上绑定了一个动态属性 :language,这一步不可或缺,有了这个绑定才可以在父级作用域引用插槽中的变量数据。...,然后通过 slotProps 在父级作用域引用它们)。

    2K30

    有趣的10个CMD命令「建议收藏」

    你现在可以使用下列 选项语法: %~I - 删除任何引号("),扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号...%~pI - 仅将 %I 扩展到一个路径 %~nI - 仅将 %I 扩展到一个文件名 %~xI - 仅将 %I 扩展到一个文件扩展名 %~sI...- 扩展的路径只含有短名 %~aI - 将 %I 扩展到文件的文件属性 %~tI - 将 %I 扩展到文件的日期/时间 %~zI - 将 %I 扩展到文件的大小...指定要改成父目录。 键入 CD drive: 显示指定驱动器中的当前目录。 不带参数只键入 CD,则显示当前驱动器和目录。 使用 /D 开关,除了改变驱动器的当前目录之外, 还可改变当前驱动器。.../reg:32 指定应该使用 32 位注册表视图访问的注册表项。 /reg:64 指定应该使用 64 位注册表视图访问的注册表项。

    6.4K10

    前端高频vue面试题总结3

    如何从真实DOM到虚拟DOM涉及到Vue中的模板编译原理,主要过程:将模板转换成ast 树,ast 用对象来描述真实的JS语法(将真实DOM转换成虚拟DOM)优化树将ast 树生成代码Vue3有了解过吗...2.2 TeleportTeleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,就有点像哆啦A梦的“任意门”在vue2中...prop 都使得其父子之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。...这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。另外,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。...Vue 是数据双向绑定的框架,双向绑定由三个重要部分构成数据层(Model):应用的数据及业务逻辑视图层(View):应用的展示效果,各类UI组件业务逻辑层(ViewModel):框架封装的核心,它负责将数据与视图关联起来而上面的这个分层的架构方案

    1.2K40

    山川湖海 | Android无障碍代理的那些事

    如果该视图是生成无障碍事件的视图的子级,则也调用此方法。 注意:修改此方法中除文字之外的其他属性可能会替换其他方法设置的属性。...如果您的自定义视图提供除了简单的 TextView 或 Button 之外的其他互动控件,则您应替换此方法并将有关视图的其他信息设置到使用此方法的事件中,如密码字段类型、复选框类型或者提供用户互动或反馈的状态...默认的 View 实现具有一组标准的视图属性,但如果您的自定义视图提供除了简单的 TextView 或 Button 之外的其他互动控件,则您应替换此方法并将有关视图的其他信息设置到由此方法处理的 AccessibilityNodeInfo...onRequestSendAccessibilityEvent() 系统会在您的视图的子级生成 AccessibilityEvent 时调用此方法。...通过此步骤,父视图可以使用其他信息修改无障碍事件。仅当您的自定义视图具有子视图且父视图可以向无障碍事件提供有助于无障碍服务的上下文信息时,才应实现此方法。

    77600

    山川湖海 - Android无障碍代理的那些事

    如果该视图是生成无障碍事件的视图的子级,则也调用此方法。 注意:修改此方法中除文字之外的其他属性可能会替换其他方法设置的属性。...如果您的自定义视图提供除了简单的 TextView 或 Button 之外的其他互动控件,则您应替换此方法并将有关视图的其他信息设置到使用此方法的事件中,如密码字段类型、复选框类型或者提供用户互动或反馈的状态...默认的 View 实现具有一组标准的视图属性,但如果您的自定义视图提供除了简单的 TextView 或 Button 之外的其他互动控件,则您应替换此方法并将有关视图的其他信息设置到由此方法处理的 AccessibilityNodeInfo...onRequestSendAccessibilityEvent() 系统会在您的视图的子级生成 AccessibilityEvent 时调用此方法。通过此步骤,父视图可以使用其他信息修改无障碍事件。...仅当您的自定义视图具有子视图且父视图可以向无障碍事件提供有助于无障碍服务的上下文信息时,才应实现此方法。

    72240

    掌握 SwiftUI 的 Safe Area

    在 UIKit 中,开发者需要利用 safeAreaInsets 或 safeAreaLayoutGuide ,才能确保将视图放置在界面中的可见部分。 SwiftUI 对上述过程进行了彻底的简化。...本文将探讨如何在 SwiftUI 中获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图的安全区域等内容。...对于视图层次上的其他视图,safeAreaInesets 只反映视图中被覆盖的部分。如果一个视图可以完整地放置在父视图的安全区域中,该视图的 safeAreaInsets 为 0。...Environment(\.safeAreaInsets) private var safeAreaInsets 使用 ignoresSafeArea 忽略安全区域 在开发 iOS 应用时,经常会碰到需要让视图可以扩展到非安全区域的情况...从 iOS 14 开始,SwiftUI 计算视图的安全区域时,将软键盘在屏幕上的覆盖区域(iPadOS 下,将软键盘缩小后键盘的覆盖区域将被忽略)也一并进行考虑。

    7.7K31

    10行代码搞定图Transformer,图神经网络框架DGL迎来1.0版本

    从最先进模型的学术研究到将 GNN 扩展到工业级应用,DGL 1.0 为所有用户提供全面且易用的解决方案,以更好的利用图机器学习的优势。 DGL 1.0 为不同场景提供的解决方案。...消息传递视图和矩阵视图 电影《降临》中有这么一句话:「你所使用的语言决定了你的思维方式,并影响了你对事物的看法。」这句话也适合 GNN。 表示图神经网络有两种不同的范式。...图 Transformer Transformer 模型已经成为自然语言处理中最成功的模型架构。研究人员也开始将 Transformer 扩展到图机器学习。...通过利用这些设计特性,与之前使用消息传递接口的矩阵视图模型的实现相比,DGL Sparse 将代码长度平均降低了 2.7 倍。简化的代码还使框架的开销减少 43%。...除了前面介绍的示例之外,DGL Sparse 的第一个版本还包括 5 个教程和 11 个端到端示例,所有教程都可以在 Google Colab 中直接体验,无需本地安装。

    83330

    Human Interface Guidelines — Modality

    Modal view 将占据整个屏幕,和整个父级视图,例如 popover 或屏幕的一部分。Modal view 通常包括退出 view 的完成和取消按钮。 ?...如果 modal 任务必须包含子视图,则提供单一与清晰的路径来遍历层次结构,避免在完成任务之外使用“Done”按钮。...遵守这些偏好,这样用户就不会想要完全关闭 app 的通知。 ·不要在 popover 上方显示 modal view  除了 alert 之外,popover 上不应该出现任何内容。...在较小的设备上可以覆盖整个屏幕。这种样式用于收集信息。 Current context:表现出与其父级视图相同的大小。...Flip-style 的转换是水平翻转视图,以显示 modal view ,此时在视觉上,modal view 看起来像当前 view 的反面。关闭时会翻转回来。

    85530

    Masonry -- 使用纯代码进行iOS应用的autolayout自适应布局

    ,指view1的父视图. */ UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10); [view1 mas_makeConstraints....attribute2 + constant,此为约束的计算公式, .multipliedBy本质上是用来限定 multiplier的 注意,因为编程中的坐标系从父视图左上顶点开始,所以指定基于父视图的...left或者top的multiplier是没有意义的,因为父视图的left和top总为0....如果你需要一个视图随着父视图的宽度和高度,位置自动变化,你应该同时指定 right,bottom,width,height与父视图对应属性的比例(基于某个尺寸下的相对位置计算出的比例),并且constant...必须为0. // 指定宽度为父视图的 1/4. make.width.equalTo(superview).multipliedBy(0.25); 工具方法 Masonry提供了一些工具方法来进一步简化约束的创建

    2.1K50

    假如 Web 当初不支持动态化

    JavaScript 实现 将庞大的 JavaScript 代码按功能模块组织起来,并管理好功能模块之间的依赖关系 从而实现以功能模块为单位的快速迭代,相当于将热修复技术应用到问题修复之外的需求迭代上...但随容器概念一同出现的,除了赋能业务跑得更快之外,还有动态业务与容器之间的依赖问题: 如何解除二者之间的强耦合,如路由、混合视图容器等场景?...前端状态数据 (基于后端业务域数据的)前端衍生数据 将这些数据填入业务组件,即可渲染出完整的功能模块(无论是在客户端还是服务端),再将其放置到视图容器中合适的坑位里,就完成了一次组件级的“发布”过程...,相比之下坑位与端的关联更为紧密,而动态化的唯一手段就是将端侧的东西搬到云上去,所以要解决的关键问题是如何实现坑位的动态化 有 2 个思路: 干掉坑位的概念:将坑位的概念从组件级扩展到页面级,一个页面容器...(一个 URL)即一个坑位 将坑位组件化:提供标准的坑位组件,就像iframe 页面是一种天然的动态坑位,可打开一个新的页面容器加载任意 URL 对于除页面之外的其它布局容器,如对话框、消息条、Banner

    73820

    Angular企业级开发(7)-MVC之控制器

    1.MVC中的控制器 AngularJS的控制器主要为了把模型和视图连接在一起。大多数业务逻辑操作都会放在视图对应的控制器中。...当一个控制器通过ng-controller指令连接到DOM上,Angular将实例化一个新的控制器对象,然后调用指定的控制器的构造函数。...控制器并列Demo 4.2 视图中控制器嵌套 默认情况下,AngularJS在当前作用域中无法找到某个属性,就会在父级作用域中进行查找。即子级控制器会继承父级控制器中的对象。...但是子级作用域和父级作用域中有相同的属性,子级使用自己的作用域。这个时候子级作用域要访问父级作用域的属性可以通过$parent。类似JavaScript本身的原型链方式。..."; }]); AngularJS处理Controller提供一种作用域别名的方式,其实就是将Model直接绑定Controller的实例上。

    1.9K50
    领券