如何使用辅助功能模式使可跨文本可点击

Posted

技术标签:

【中文标题】如何使用辅助功能模式使可跨文本可点击【英文标题】:How to make spannable text clickable with Accessibility mode on 【发布时间】:2017-07-01 14:35:41 【问题描述】:

我有一个问题声明,我需要在打开辅助功能设置的情况下运行我的应用程序,以获得回话反馈,但这里的问题是,当我单击其中包含 Spannable 链接的 TextView 时,它会显示全文,但不允许我单独单击该 Spannable 文本,同时禁用可访问性允许使字符串多跨越或链接可点击。

这是使String 可点击的代码:

SpannableString ss = new SpannableString("android is a Software stack");
ClickableSpan clickableSpan = new ClickableSpan() 
    @Override
    public void onClick(View textView) 
        startActivity(new Intent(MyActivity.this, NextActivity.class));
    
    @Override
    public void updateDrawState(TextPaint ds) 
            super.updateDrawState(ds);
            ds.setUnderlineText(false);
        
;
ss.setSpan(clickableSpan, 22, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView textView = (TextView) findViewById(R.id.hello);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(Color.TRANSPARENT);

【问题讨论】:

请参考此链接***.com/questions/5183645/… 我已经尝试过了,但对我没有帮助。 你找到任何关于这个问题的答案了吗?我陷入了类似的问题。如果有,请告诉我解决方案。 我也遇到了同样的问题。有没有人对此有好的解决方案? 有人找到解决办法吗?遇到同样的问题。 【参考方案1】:

如果您使用的是 Android X 库,您应该能够通过以下方式处理可访问性和可点击的可跨字符串:

ViewCompat.enableAccessibleClickableSpanSupport(yourView);

还要确保你有最新的依赖:

com.android.support:appcompat-v7:28.0.0

它应该可以回到 API 19。

注意:要启用 Android X 库,请转到您的 gradle.properties 并添加以下行:

android.useAndroidX = true
android.enableJetifier = true

【讨论】:

这是谷歌发现的关于该方法调用的唯一一篇文章,你能否详细说明你的答案,因为我不明白这应该如何工作,调用一个有链接的 textView在字符串中,但看不到任何区别。使用它的期望是什么? 当处于辅助功能模式时,Talkback 不会将可跨字符串读取为可点击对象,因此用户不会知道有可点击的链接。在 Android X 之前,您必须依赖解决方案,例如使用 URLSpan with a match IntentFilter。 ViewCompat.enableAccessibleClickalbleSpanSupport 来解决这个问题。文档:developer.android.com/reference/androidx/core/view/… 如果你有 Android X,我应该工作。我们在我们公司的代码库中使用。【参考方案2】:

恐怕在 android 中没有办法实现这一点(几个月来我遇到了同样的问题)。唯一的方法是使用本地上下文菜单。看起来 Talkback 正试图让 ADA 用户使用那里的手势来习惯菜单,这将解决我们开发方面的太多问题。可能还有另一种方法,即创建一个 WebView,然后添加将处理所有内容的 html 元素,但这对应用程序性能不利:(

这里提到:Clickable links(Google 支持)

您必须访问local context menu 以激活Swiping up and then right 的任何可点击范围,然后点击Links 子菜单。

希望这会有所帮助:)

【讨论】:

新的 enableAccessibleClickableSpanSupport 怎么样? 但是没有办法双击文本本身并打开链接?您需要执行手势,然后选择链接,然后选择链接本身?在文本中打开链接需要很多用户操作!【参考方案3】:

无事可做。只需用两根手指在屏幕上单击 Spannable 链接,其中一根手指必须在 Spannable 链接上。多试几次!!!

【讨论】:

【参考方案4】:

试试这个,对我有用。另一种可行的解决方案。

private void setUpBottomSheetAccessibility() 
    ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() 

        @Override
        public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) 
            if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_LONG_CLICKED) 
                //Put your work to be done on double click;
            
            super.onPopulateAccessibilityEvent(host, event);
        
    );

上面的代码 view 是您的 Textview 或任何视图。这个事件在双击时起作用。

我的工作正常。

【讨论】:

以上是关于如何使用辅助功能模式使可跨文本可点击的主要内容,如果未能解决你的问题,请参考以下文章

寻找 iOS VoiceOver 辅助功能指南:当我点击文本时,它应该说多少?

在哪里可以找到 iOS“配音”功能的 emoji 辅助功能文本?

粗体文本辅助功能选项隐藏 UIButtonBarItem 图形

如何在 swift 中使用辅助功能中的点击手势?

关于 iOS 辅助功能。如何将焦点转移到pickerView

iOS 刷新辅助功能标签