UWP开发砸手机系列(一)—— Accessibility

简介: 原文:UWP开发砸手机系列(一)—— Accessibility  因为今天讨论的内容不属于入门系列,所以我把标题都改了。这个啥Accessibility说实话属于及其蛋疼的内容,即如何让视力有障碍的人也能通过声音来使用触屏手机……也许你这辈子也不会接触,但如果有一天你遇到了,碰巧你又看了我这一篇,你就可以挺起胸膛大声说:这个逼我装定了!   首先我们来看下Accessibility在Windows 10 Mobile上原生支持的情况,点击“设置”-》“轻松使用”-》“讲述人”,开启讲述人之后,你可以先体验个几分钟(另外讲述人对中文的支持并不是很好,建议切换到英文系统)。
原文: UWP开发砸手机系列(一)—— Accessibility

  因为今天讨论的内容不属于入门系列,所以我把标题都改了。这个啥Accessibility说实话属于及其蛋疼的内容,即如何让视力有障碍的人也能通过声音来使用触屏手机……也许你这辈子也不会接触,但如果有一天你遇到了,碰巧你又看了我这一篇,你就可以挺起胸膛大声说:这个逼我装定了!

  首先我们来看下AccessibilityWindows 10 Mobile上原生支持的情况,点击“设置”-》“轻松使用”-》“讲述人”,开启讲述人之后,你可以先体验个几分钟(另外讲述人对中文的支持并不是很好,建议切换到英文系统)。

  我知道你想砸手机,但先别急着,等我们把今天的内容讲完再砸……

  如何实现让“讲述人”朗读屏幕内容呢?按照某软一贯的尿性,HelloWorld必然简单到让人发指,只需给想要被朗读的控件添加“AutomationProperties.Name”就可以了。

        <Button AutomationProperties.Name="I am a button">Button</Button>

  手指戳上去的时候就会听到“I am a button”。如果你做完了这个Sample然后就跑去汇报可行性,那你就完了……

  首先我们遇到的第一个问题就是讲述人无法识别自定义的控件,甚至连GridBorder这样的默认没有交互的控件也不会识别,这个是很糟糕的。项目中难免会用到一些UserControlCustomControl的,DataTemplate里又总会用到Grid啥的。这里统统读不出来,作为一个负责任的大公司,产品就不能发布了,后果很严重。

  如何解决这个问题呢?其实也没那么复杂啦,某软还是提供了一些接口来做这些事情,参考了MSDN上的文档(极其没有卵用)和给出的Sample(有误导人的嫌疑),最终又查看了SilverlightButtonTextBlock的源码(Windows Runtime貌似没有可以反编译的工具可以看到源码,ILSpyJustDecompile均只能看到接口定义)。给出以下的解决方案:

  解决方案以Grid举例,意图让“讲述人”识别Grid并念出AutomationProperties.Name中填写的文本。

    public class CanReadGrid : Grid
    {
        protected override AutomationPeer OnCreateAutomationPeer()
        {
            return new GridAutomationPeer();
        }
    }

    public class GridAutomationPeer : AutomationPeer
    {
        protected override object GetPatternCore(PatternInterface patternInterface)
        {
            if (patternInterface == PatternInterface.Grid)
            {
                return this;
            }

            return null;
        }

        protected override AutomationControlType GetAutomationControlTypeCore()
        {
            return AutomationControlType.Custom;
        }

        protected override string GetClassNameCore()
        {
            return "CanReadGrid";
        }
    }

  第一步需要继承自现有的系统控件Gird,然后override方法OnCreateAutomationPeer,该方法继承自UIElement,已经是非常底层的对象了。但如果你去查看Grid类本身的接口定义,会发现Grid是没有对该方法做处理的。而默认就可以读出的ButtonTextBlock等控件均override了该方法。

        //
        // Summary:
        //     在派生类中实现时,为 Microsoft UI 自动化基础结构返回类特定的 AutomationPeer 实现。
        //
        // Returns:
        //     要返回的类特定的 AutomationPeer 子类。
        protected virtual AutomationPeer OnCreateAutomationPeer();

  第二步需要创建类GridAutomationPeer继承自AutomationPeerAutomationPeer文档中给出的说法是提供一个对 Microsoft
UI 自动化公开关联所有者类的自动化同级的基类”。(虽然高考语文还可以,但仍不足以正确阅读理解MSDN天书……)既然文档看不懂,干脆就直接抄袭ButtonTextBlock的源码来写呗。经反复比较推敲,确认了最为核心的方法protected override object GetPatternCore(PatternInterface
patternInterface),亲测鉴定只要实现了该方法,即可由讲述人识别。GetAutomationControlTypeCoreGetClassNameCore都只是锦上添花而已。最终使用的XAML如下:

    <local:CanReadGrid Background="Red"
                       AutomationProperties.Name="Can read gird">
    </local:CanReadGrid>

  这个自定义的Grid终于能被“讲述人”毫无感情的念出“can read gird”了。说实话还是Contana的声音好听一些。

  本篇介绍了如何让讲述人念出自定义控件,并强力建议先不要砸手机或汇报可行性分析,因为我还留了一个大坑给你们。可交互的控件比如Button,讲述人会语音提示双击可以激活Click操作,通过ViewModel中的Command绑定也没有问题。但问题是没有Command属性的控件要如何处理?通过Behaviors绑定的Command是万万不可能会自动识别的啦?想要知道答案的,下个礼拜见……

 

 

 

 

 

 

 

 

 

 

目录
相关文章
|
28天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
4月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
75 0
|
3月前
|
小程序 前端开发 JavaScript
前端Uni-app开发微信小程序|微信小程序手机商城
前端Uni-app开发微信小程序|微信小程序手机商城
|
4月前
|
XML Java Android开发
Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)
Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)
68 0
|
4月前
|
XML Java Android开发
Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)
Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)
82 0
|
4月前
|
XML Java Android开发
Android App开发手机阅读之使用贝塞尔曲线实现给主播刷礼物特效(附源码和演示视频 简单易懂 可直接使用)
Android App开发手机阅读之使用贝塞尔曲线实现给主播刷礼物特效(附源码和演示视频 简单易懂 可直接使用)
41 0
|
4月前
|
XML Java Android开发
Android App开发手机阅读中贝塞尔曲线的原理讲解及实现波浪起伏动画实战(附源码和演示视频 可直接使用)
Android App开发手机阅读中贝塞尔曲线的原理讲解及实现波浪起伏动画实战(附源码和演示视频 可直接使用)
44 0
|
2月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
7月前
|
IDE 开发工具 Android开发
如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android
如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android
106 1

热门文章

最新文章