我如何使用android Talkback与clickableSpan



所以我有一个可变长度的文本,直到现在我已经用SpannableString填充它,以突出显示特定的"硬"字,然后您可以单击以在对话框中获得解释。但是因为我必须为可访问性设计我的应用程序,我需要android Talkback功能来读出这些单词(加上周围的文本,但我现在已经有了)以及能够点击它们。到目前为止,我还没有找到一种方法,甚至点击 clickableespan 而不禁用Talkback。

我发现一些关于ClickableSpan不能处理可访问性,但URLSpan是?如果是这样的话,我可以打开一个带有URLSpan的自定义文本的对话框吗?还是因为我调用了text.setMovementMethod(LinkMovementMethod.getInstance()); ?

事先感谢,在无障碍方面很难找到任何东西,似乎没有多少程序员关心。

反馈用户将使用本地上下文菜单访问文本中的链接:https://support.google.com/accessibility/android/answer/6007066?hl=en

也许这是最简单的解决方案,它对我来说很有效。

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ClassroomLog.log(TAG, "Textview Click listener ");
        if (textView.getSelectionStart() == -1 && textView.getSelectionEnd() == -1) {
            // Perform your action here
        }
    }
});

所以我终于找到了一种方法来使用spannablestring的Talkback。不完全是,但这是个变通办法。我从TextView中删除了ClickableSpan,但存储了开始和结束位置,并将textView放入另一个布局。

然后,我通过存储的位置迭代,并在文本顶部添加了一个合适的ContentDescriptiononClick属性,我需要在它的onClickListener中。为了获得视图的位置和大小,我使用了以下代码:

//clickableSpans is an int[] Array with the start and end character positions of the previous clickableSpans stored after each other
for (int i = 0; i < clickableSpans.length; i +=2) {
    int width= (int) (layout.getPrimaryHorizontal(clickableSpans[i+1]) - (int) layout.getPrimaryHorizontal(clickableSpans[i]));
    int height= layout.getLineBottom(layout.getLineForOffset(clickableSpans[i])) - layout.getLineTop(layout.getLineForOffset(clickableSpans[i]));
    int xOffset = (int) layout.getPrimaryHorizontal(clickableSpans[i]);
    int yOffset = layout.getLineTop(layout.getLineForOffset(clickableSpans[i]));
    //Now position an empty View according to those values
}

相关内容

  • 没有找到相关文章

最新更新