如何将 Androids Talkback 与 clickableSpan 一起使用?
How can I use Androids Talkback with clickableSpan?
所以我有一个可变长度的文本,直到现在我已经用 SpannableString 填充它以突出显示特定的 "hard" 单词,然后您可以单击以获取对话框中的解释。但是因为我必须为 accessibility 设计我的应用程序,所以我需要 androids Talkback 功能来读出这些词(加上它周围的文本,但我'现在已经知道了)以及能够点击它们。到目前为止,我还没有找到一种方法,甚至可以在不禁用 Talkback 的情况下单击 ClickableSpan。
我发现 ClickableSpan 无法处理辅助功能,但 URLSpan 可以吗?如果是这样,我可以打开一个带有 URLSpan 的自定义文本的对话框吗?还是跟我打电话有关系 text.setMovementMethod(LinkMovementMethod.getInstance());
?
提前致谢,在辅助功能上很难找到任何东西,似乎没有多少程序员很关心。
所以我终于找到了一种将 Talkback 与 SpannableStrings 一起使用的方法。好吧,不是真的,但这是一种解决方法。我从 TextView
中删除了 ClickableSpan
但存储了开始和结束位置并将 textView 放入另一个布局中。
然后我遍历了存储的位置,并在文本顶部添加了空视图,其中包含 ContentDescription
和我需要的 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
}
Talkback 用户将使用本地上下文菜单访问文本中的链接: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 填充它以突出显示特定的 "hard" 单词,然后您可以单击以获取对话框中的解释。但是因为我必须为 accessibility 设计我的应用程序,所以我需要 androids Talkback 功能来读出这些词(加上它周围的文本,但我'现在已经知道了)以及能够点击它们。到目前为止,我还没有找到一种方法,甚至可以在不禁用 Talkback 的情况下单击 ClickableSpan。
我发现 ClickableSpan 无法处理辅助功能,但 URLSpan 可以吗?如果是这样,我可以打开一个带有 URLSpan 的自定义文本的对话框吗?还是跟我打电话有关系 text.setMovementMethod(LinkMovementMethod.getInstance());
?
提前致谢,在辅助功能上很难找到任何东西,似乎没有多少程序员很关心。
所以我终于找到了一种将 Talkback 与 SpannableStrings 一起使用的方法。好吧,不是真的,但这是一种解决方法。我从 TextView
中删除了 ClickableSpan
但存储了开始和结束位置并将 textView 放入另一个布局中。
然后我遍历了存储的位置,并在文本顶部添加了空视图,其中包含 ContentDescription
和我需要的 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
}
Talkback 用户将使用本地上下文菜单访问文本中的链接: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
}
}
});