Android TalkBack等同于UIKit的UIAccessibilityTraits可调

omhiaaxx  于 2023-03-21  发布在  Android
关注(0)|答案(1)|浏览(99)

有吗?这对视力受损的用户来说似乎很有用。当UIView有X1 E0 F1 X时,整个视图可以作为一个单元聚焦,用户可以增加/减少该单元的数量,或者继续滑动到屏幕上的其他可聚焦元素。
例如,假设一个屏幕包含要添加到冰淇淋中的浇头列表。每个浇头都有一个加号(+)和减号按钮(-)。使用可调整特性,用户可以在浇头之间滑动,然后停止并向上/向下滑动以添加/删除他们想要的浇头。如果没有可调整特性,每个浇头在屏幕上最多需要3个元素,每个元素都需要获得焦点:Sprinkles(标签),添加按钮,删除按钮。滑动所有这些元素听起来像一个视力受损的用户的噩梦。

wz3gfoph

wz3gfoph1#

我知道这有点晚了,但这就是我在Xamarin中实现它的方式。我使用了一个带有按钮的框架作为组件的根元素,并创建了一个新的FrameRenderer。

using static Android.Views.Accessibility.AccessibilityNodeInfo;
using Action = Android.Views.Accessibility.Action;

...

[assembly: ExportRenderer(typeof(CustomStepper), typeof(CustomStepperRenderer))]
namespace MyApp.Core.Android.Renderers
{
    public class CustomStepperRenderer : FrameRenderer
    {

        public CustomStepperRenderer(Context context) : base(context) { }

        public override void OnInitializeAccessibilityEvent(AccessibilityEvent e)
        {
            base.OnInitializeAccessibilityEvent(e);
            e.ContentDescription = (Element as CustomStepper)?.Value.ToString();
        }

        public override bool PerformAccessibilityAction([GeneratedEnum] global::Android.Views.Accessibility.Action action, Bundle arguments)
        {
            var stepper = Element as CustomStepper;
            switch (action)
            {
                case ScrollForward: return stepper.Increment();
                case ScrollBackward: return stepper.Decrement();
            }
            return base.PerformAccessibilityAction(action, arguments);
        }

        public override void OnInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info)
        {
            base.OnInitializeAccessibilityNodeInfo(info);
            info.ClassName = "android.widget.seekbar";
            info.AddAction(AccessibilityAction.ActionScrollForward);
            info.AddAction(AccessibilityAction.ActionScrollBackward);
            info.ContentDescription = (Element as CustomStepper)?.Value.ToString();
        }
    }

}

相关问题