2015-08-20 23 views
2

所以我有一个可变长度的文本,直到现在我填充了一个SpannableString突出显示特定的“硬”单词,然后单击可以在对话框中获得解释。但因为我必须设计我的应用程序辅助功能我需要机器人对讲功能读出这些词(加上它周围的文字,但我已经得到了这一点),以及能够点击它们。到目前为止,我还没有找到一种方法,即使点击ClickableSpan而不禁用Talkback。如何使用clickableSpan使用Android Talk Talk?

我发现了一些有关ClickableSpan无法处理Acessibility的问题,但是URLSpan是?如果是这种情况,我可以使用URLSpan打开一个包含自定义文本的对话框吗?或者它与我打电话text.setMovementMethod(LinkMovementMethod.getInstance());有什么关系?

在此先感谢,在辅助功能方面很难找到任何东西,很多程序员似乎并不在乎。

+1

话语提示目前不支持'ClickableSpan'。它通过启动URL的意图来支持'URLSpan' - 它不会通过正常的代码路径来点击spannables。您需要找到一些替代方法来公开可点击的项目。 – alanv

+0

@alanv是啊,认为,但很高兴确定:) –

回答

0

所以我终于找到了一种使用SpannableStrings的Talkback的方法。嗯,不是真的,但它是一种解决方法。我从TextView中删除ClickableSpan,但存储了开始和结束位置,并将textView放入另一个布局中。

然后我通过存储的位置进行迭代,并在文本顶部添加空白视图,其中和onClick属性是我需要的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 
}