我目前正努力用更多的TalkBack
发声来创建PagerTabStrip
。背景是:
对讲
用户在左右选项卡上添加“未选择选项卡[选项卡名称],单击两次以选择”和“已选择选项卡[选项卡名称]”到中间位置
TalkBack
聚焦中心选项卡
通过重写所有需要的类(例如:PagerTitleStrip
,ViewPager
,FragmentPagerAdapter
),并直接在选项卡TextView
上添加右侧的contentDescription
,我已经部分成功地完成了这项工作。它运行得相当好,但我不满意。这些类的维护需要针对Android主类的每个新版本进行更新(或者我将保留旧的设计),并且我发现每次复制粘贴所有类内容都是肮脏的(下一个开发人员呢?)。因此,我尝试了另一种方法:
PagerTabStrip
的子类中使用AccessibilityEvent
,为发声提供更多上下文。它不起作用,因为AccessibilityEvent
中的getText()
和getContentDescription
方法不用于发声
ViewPager
查看AccessibilityNodeInfo
,看看我是否能解决这个问题。但是我还没有确定发声的来源(是标签还是内容),也没有确定必须在AccessiblityNodeInfo
中更改什么才能更改发声
因此,我想知道是否可以使用子类来解决我的问题,或者我除了复制主类之外是否别无选择。提前感谢你的帮助。
对于选项卡本身,如果您负责膨胀视图,那么您可以使用自定义TextView,根据其激活(或选择)状态修改其内容描述:
public class TabTextView extends TextView {
public TabTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public CharSequence getContentDescription() {
CharSequence contentDescription = super.getContentDescription();
return isActivated() ? appendSelectedTo(contentDescription) : contentDescription;
}
private String appendSelectedTo(CharSequence contentDescription) {
return getResources().getString(R.string.tab_selected, contentDescription);
}
}
其中R.string。所选选项卡\u
为
这预先假定您(或您正在使用的库)在选中时正在使用
setActivated(true)/setSelected(true)
标记选项卡视图(以及使用setActivated(false)/setSelected(false)
)。
向用户宣布内容已更改的最简单方法是添加
ViewPager。通知页面更改时的OnPageChangeListener
:
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO: format correctly with String resource to support translation
viewPager.announceForAccessibility("Showing " + viewPager.getAdapter().getPageTitle(position));
}
});
我知道Android TalkBack用户已经习惯了这种行为,而不知道什么是可点击的
@ChrisCM提到的元素上有一个(默认情况下)可单击的指示-TalkBack将在带有
View的视图中追加“双击激活”(以前是“双击选择”)。附加OnClickListener
。
您可以修改TalkBack使用可访问性委托大声读取的操作,方法是重写
onOrializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info)
方法:
class TabAccessibilityDelegate extends AccessibilityDelegateCompat {
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.addAction(
new AccessibilityNodeInfoCompat.AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_CLICK,
"select tab"
)
);
}
}
并在每个选项卡视图上设置它:
ViewCompat.setAccessibilityDelegate(tabView, new TabAccessibilityDelegate());
这样,现在TalkBack将读取:
"
此答案中给出了定制使用提示的其他方法。
这其实很简单。您要做的是创建PagerTabStrip的子类。在这个子类中,增加可访问性事件的传播以添加所需的信息!下面是我的实现。
public class A11yPagerTabStrip extends PagerTabStrip {
public A11yPagerTabStrip(Context context) {
super(context);
}
public A11yPagerTabStrip(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
Log.wtf(LOG_TAG, "onRequestSendAccessibilityEvent: " + event.toString());
final String textViewTitle = ((TextView) child).getText().toString();
final ViewPager viewPager = (ViewPager) this.getParent();
final int itemIndex = viewPager.getCurrentItem();
String title = viewPager.getAdapter().getPageTitle(itemIndex).toString();
if (textViewTitle.equalsIgnoreCase(title)) {
child.setContentDescription("Tab " + textViewTitle + "selected.");
} else {
child.setContentDescription("Tab " + textViewTitle + "not selected.");
}
return super.onRequestSendAccessibilityEvent(child, event);
}
}
请注意,我覆盖了内容描述。通过这种方式,我们不改变应用程序的任何可视化表示,只改变talk back读取的内容。
注:对讲用户使用“双击选择”部分。正如我在代码中所做的那样,我将停止此操作。
我有这个应用程序与WebView显示HTML内容。 在我做了一些相当大的更改之后,对讲的可访问性出现了一些“问题”,特别是文本到语音和触摸探索,仅在4.4设备上(不在5.0上)。 触摸一段(段落)文本有时会起作用,但有时会产生点击声,没有输出,文本也不会像应该的那样用选择矩形突出显示。 在5.0上,一切都很好:触摸一段文本会在其周围绘制一个选择,文本就会被说出。 我知道4.4上的回归与我的一些更改
Apple许可地狱:osascript和可访问性(辅助访问)。 错误:不允许osascript进行辅助访问。(-1719) 我在一个名为QuickenUpdate的文件中有一行脚本。scpt 在脚本编辑器中运行(works): 运行在终端(工程): 我有一个shell脚本(QU.sh)来运行这个。 如果我从BBEdit内部运行QU.sh,它会起作用。 如果我运行QU. sh从终端,它的工作原理。
在某些用户操作中,我想在屏幕上发布一些<code>声明,不久之后,我想将可访问性焦点转移到<code>特定视图。 我可以实现它就像, 但这只是一种变通方法。当用户使用< code >自定义语速时,在某些情况下可能会失败。 当对讲机在阅读公告后结束时,我们有没有办法得到回拨?
启用对讲后,是否有办法将辅助功能焦点手册设置为特定视图?例如,当我的活动开始时,我希望TalkBack自动聚焦于某个按钮(视图周围的黄色框)并读取其内容描述。 到目前为止,我所尝试的: 请求焦点()似乎只是请求输入焦点,与可访问性焦点无关。我也尝试过: 这些似乎都不起作用。
我已经为我的应用程序编写了自己的。在内部,它使用为通过我的应用导航的用户提供语音反馈。当打开和时,我从我的应用程序中获得口头反馈,然后是TalkBack的反馈。 有什么方法可以停止TalkBack为我的应用程序,因为我拥有我的应用程序的可访问性服务?
当视图具有事件单击并启用对讲时。我需要禁用视图中的“双击”音频。 我在android开发中使用可访问性。 请问我该怎么做?