我正在使用辅助功能对讲功能,但遇到了一个问题。我在父Activity中有一个底部导航,我正在使用.add
从设置选项卡打开另一个片段(内部片段),但默认情况下内部片段视图未获得焦点。
我也尝试了. replace
,但是默认情况下它并不关注片段创建。
开放片段码
val details = DetailsFragment.newInstance();
getSupportFragmentManager().setupForAccessibility()
getSupportFragmentManager().beginTransaction().add(android.R.id.content, details).commit()
我使用了这个扩展函数来避免关注source的上一个片段
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"
并请求焦点,但没有作用
请给我建议任何帮助都将不胜感激
2条答案
按热度按时间qgzx9mmu1#
我有最好的运气使用
您想要聚焦的视图,或者
让系统做它做的任何事情,然后在片刻之后跳进去并强制焦点改变。
但如果干扰了正常的导航,这可能会被认为是不好的可访问性,这可能就是为什么很难让焦点持续工作的原因!最好只是宣布新的片段(比如
view.announceForAccessibility("new fragment")
),让用户从顶部开始导航。这取决于你的应用程序,这是你的决定此外,您可能希望对片段使用
replace
而不是add
,如果您在旧片段上添加片段,TalkBack可能会在查看旧片段上的“不可见”视图时卡住yhuiod9q2#
这是我改进的代码,从@cactustictacs扩展而来
完整:https://github.com/dotrinh-PM/AndroidTalkback