问题描述
我正在使用可访问性对讲功能,并且遇到一个问题,我在父活动中有一个底部导航,并且从设置选项卡中,我使用.add
打开了另一个片段(内部片段),但内部片段视图没有打开默认情况下获得焦点
我也尝试过使用. replace
,但是默认情况下它并不专注于片段的创建。
打开片段代码
val details = DetailsFragment.newInstance();
getSupportFragmentManager().setupForAccessibility()
getSupportFragmentManager().beginTransaction().add(android.R.id.content,details).commit()
的上一个片段上
fun FragmentManager.setupForAccessibility() {
addOnBackStackChangedListener {
val lastFragmentWithView = fragments.lastOrNull { it.view != null }
for (fragment in fragments) {
if (fragment == lastFragmentWithView) {
fragment.view?.importantForAccessibility =
View.IMPORTANT_FOR_ACCESSIBILITY_YES
} else {
fragment.view?.importantForAccessibility =
View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
}
}
}
}
正常情况下,我表明在第一个片段的开头它首先聚焦在Textview
上,并且自动讲话,但是在内部片段中它默认情况下没有聚焦,所以我应该怎么做才能默认在第一个片段上聚焦默认查看
我已经尝试了
android:focusable="true"
android:focusableInTouchMode="true"
并请求焦点,但无法正常工作
请建议我给予任何帮助
解决方法
我运气最好
view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
在您想要聚焦的视图上,或者也许
Handler().postDelayed({
view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
},someDelayMillis)
让系统做任何事情,然后过一会儿跳入并强制改变焦点。
但是,如果这干扰了通常的导航,则可能会被认为是不良的可访问性,这可能就是为什么很难始终如一地集中精力的原因!最好只是宣布新的片段(用view.announceForAccessibility("new fragment")
之类的符号,然后让用户从顶部开始导航可能会更好。这取决于您的应用,是您的通话
此外,您可能想使用replace
代替add
来创建片段,如果您在一个旧片段的顶部添加一个片段,TalkBack可能会卡住该片段上的“不可见”视图旧片段