如何在辅助功能模式下使可选文本具有可点击性

10
我有一个问题,需要在辅助功能设置下运行我的应用程序,以便获得语音反馈,但问题是当我点击包含Spannable链接的TextView时,它会读取整个文本,但不允许我单独点击该Spannable文本,而禁用辅助功能后,可以使字符串变为多个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);

请参考此链接:https://dev59.com/K2435IYBdhLWcg3w1j2V - Prabha Karan
我已经尝试过了,但那并没有帮助我。 - Tushar Purohit
你在这个问题上找到了答案吗?我也遇到了类似的问题。如果你有解决方法,请告诉我。 - umesh
@umesh 不,我还没有找到任何解决方案,我仍在寻找,一旦解决了,我会尽快更新答案。 - Tushar Purohit
1
我也遇到了同样的问题。有人有好的解决方案吗? - setholopolus
1
有人找到解决方案了吗?我也卡在同样的问题上了。 - Madhu
4个回答

7
如果您正在使用Android X库,您应该能够通过以下方式处理可访问性和可点击的Spannable字符串:
ViewCompat.enableAccessibleClickableSpanSupport(yourView);

同时确保您拥有最新的依赖项:

com.android.support:appcompat-v7:28.0.0

它应该适用于 API 19 及以上版本。

注意:要启用 Android X 库,请前往您的 gradle.properties 文件并添加以下代码:

android.useAndroidX = true
android.enableJetifier = true

这是谷歌找到的唯一关于该方法调用的帖子,您能否详细解释一下您的答案,因为我不明白这应该如何工作,它被调用在一个包含字符串链接的textView上,但看不出任何区别。使用它的期望是什么? - David
1
当处于辅助功能模式时,Talkback无法将Spannable字符串读作可点击对象,因此用户不会知道有链接可以点击。在Android X之前,您必须依赖解决方案,例如使用URLSpan与匹配IntentFilterViewCompat.enableAccessibleClickalbleSpanSupport来解决这个问题。文档: https://developer.android.com/reference/androidx/core/view/ViewCompat#enableAccessibleClickableSpanSupport(android.view.View) - devB78
如果你的 Android X 已经安装好了,那么这个程序应该可以正常工作。我们公司的代码库中正在使用它。 - devB78

0

很抱歉,在安卓中没有办法实现这个功能(我也遇到了几个月的同样问题)。唯一的方法是使用本地上下文菜单。看起来Talkback正在尝试让ADA用户习惯使用手势来使用菜单,这将解决我们开发方面的许多问题。可能还有另一种方法,就是创建一个WebView,然后添加处理所有内容的HTML元素,但这会影响应用程序的性能:(

如此提到:可点击链接(Google支持)

您必须通过向上滑动,然后向右滑动来访问本地上下文菜单,然后单击链接子菜单以激活任何可点击的跨度。

希望这可以帮助您 :)


新的enableAccessibleClickableSpanSupport怎么样? - David
但是没有办法双击文本本身并打开链接吗?您需要执行手势,然后选择链接,然后选择链接本身吗?这需要很多用户操作才能打开文本中的链接! - h_k

0
试试这个,对我有用。一个可行的替代解决方案。
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或任何视图。这个事件会在双击时触发。
在我的端上运行良好。

-2

没什么事情要做。只需用两个手指点击屏幕上的Spannable链接,其中一个手指必须在Spannable链接上。多试几次!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接