Xamarin 表单 - 如何在 TabbedView (iOS) 上自定义 VoiceOver

Posted

技术标签:

【中文标题】Xamarin 表单 - 如何在 TabbedView (iOS) 上自定义 VoiceOver【英文标题】:Xamarin Forms - How can I customize VoiceOver on TabbedView (iOS) 【发布时间】:2021-10-01 08:33:53 【问题描述】:

我有一个简单的 TabbedView,底部有三个标签图标,在 ios 中显示得很好。

但是,我对它为有视力问题的人生成的 VoiceOver 文本并不满意。上面写着:

“标签栏页面 1 之一” “标签栏第 2 页,共三页” “标签栏第 3 页三之三”

我想让它更友好,我想说:

“测试 1” “测试 2” “测试 3”

我尝试使用标准的AutomationProperties.Name 属性来实现这一点,我在应用程序的其他任何地方都使用了它,但是对于 TabbedPage,它完全被忽略了:

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:mypages="clr-namespace:radio;assembly=radio" 
             x:Class="radio.MainPage">

    <NavigationPage Title="Page 1" IconImageSource="icon_1.png" AutomationProperties.Name="Test 1" >
        <x:Arguments>
            <mypages:PageArchive />
        </x:Arguments>
    </NavigationPage>

    <mypages:PagePlayer Title="Page 2" IconImageSource="icon_2.png" AutomationProperties.Name="Test 2" />

    <mypages:PageAboutXaml Title="Page 3" IconImageSource="icon_3.png"  AutomationProperties.Name="Test 3"/>

</TabbedPage>

有什么想法可能是错的吗?

【问题讨论】:

我认为这没有错。这就是它的工作原理。根据Automation properties。某些元素的读取方式与其他元素不同,这也取决于用于此的软件:/ 对于所有其他实体,我能够自定义 VoiceOver 文本(使其对用户更友好)。在 TabbedPage 中,问题是当涉及到外语时,原来的内置文本没有意义,听起来像“Tab bed Page 2 One 正斜杠三” - 听起来真的很尴尬。我希望能够覆盖它。 【参考方案1】:

尝试在 tabBarItem 上设置自定义accessibilityLabel

我们需要创建自定义渲染器来实现这一点。

[assembly: ExportRenderer(typeof(TabbedPage), typeof(MyRenderer))]
namespace FormsApp.iOS

    public class MyRenderer : TabbedRenderer
     
        public override void ViewWillLayoutSubviews()
        
            base.ViewWillLayoutSubviews();
            int index = 1;
            foreach (var vc in ViewControllers)
            
               vc.TabBarItem.AccessibilityLabel = "Test" + index.ToString();
               index++;
                        
          
    

请参阅https://***.com/a/26368487/8187800。

【讨论】:

感谢您的努力,我完全使用了上面的代码,但它仍然显示“TabBar Test1 of three”。如果我将“test”更改为“x x”,它确实反映了更改,所以我确信代码确实有效果,它只是不会删除选项卡项名称周围的文本。 您是否尝试启用isAccessibilityElement 一组accessibilityIdentifier ,如此链接中所述:***.com/a/49437988/8187800? 我尝试设置以下所有属性 AccessibilityLabelIsAccessibilityElementAccessibilityIdentifierAccessibilityValueAccessibilityTextualContext - 但它无助于摆脱“Tab Tar” ' - 'Tab' - ... 选项卡名称周围的文本。 对不起,我尝试了所有方法但没有运气,也许你需要自定义一个标签布局来替换默认布局,我建议你在Apple Developer forum提出这个问题以获得更好的支持。 其实我建议你不要那样做。视力受损的人需要上下文,即他们在哪个选项卡上以及有多少个选项卡。这将帮助他们更轻松地导航。一般来说,最好使用设备默认设置来实现可访问性,因为视力受损的用户已经习惯了屏幕阅读器消息的格式和上下文。如果在您的示例中,选项卡仅表示“测试 1”,则使用将不知道它们有多少个选项卡,或者它们位于哪个选项卡编号。我还会确保您涉及视力受损的人,因为对您来说似乎“友好”的东西可能对他们来说似乎并不“友好”。

以上是关于Xamarin 表单 - 如何在 TabbedView (iOS) 上自定义 VoiceOver的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 表单中实现分页

如何在 iOS 的 xamarin 表单中创建渐变按钮背景

如何在 xamarin 表单 UWP 中使用 AppWindow 打开多个窗口?

如何创建xamarin表单按钮左角半径

如何使用 xamarin 表单提高移动设备的性能

如何在 Xamarin 表单中制作浮动操作按钮