kotlin - 默认情况下,对讲不关注内部片段开始时的任何 View

标签 kotlin android-fragments autofocus talkback accessibility

我正在使用辅助功能对讲功能,我面临一个问题,我在父事件中有一个底部导航,并且在设置选项卡中我使用 .add 打开另一个片段(内部片段),但是默认情况下,内部片段 View 未获得焦点

我也尝试过使用。替换,但默认情况下它并不专注于片段创建。

打开片段代码

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 并自动说话,但在内部片段中,默认情况下它不聚焦,所以我应该做什么才能默认获得焦点默认情况下在第一个 View 上

我已经尝试了

android:focusable="true"
android:focusableInTouchMode="true"

并请求焦点,但它不起作用

请向我建议任何帮助,我将不胜感激

最佳答案

我使用起来非常幸运

view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)

在您想要聚焦的 View 上,或者也许

Handler().postDelayed({
    view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
}, someDelayMillis)

让系统做它该做的任何事情,然后稍后跳入并强制改变焦点。

但是,如果它干扰了通常的导航,这可能会被认为是不好的可访问性,这可能就是为什么很难让焦点持续工作的原因!最好只是宣布新片段(使用类似 view.announceForAccessibility("newfragment") 的内容)并让用户从顶部开始导航。这取决于您的应用,由您决定

此外,您可能希望对片段使用 replace 而不是 add,如果您在旧片段之上添加片段,TalkBack 可能会卡在查看片段上旧片段的“不可见” View

关于kotlin - 默认情况下,对讲不关注内部片段开始时的任何 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64377154/

相关文章:

android - Kotlin - 排序 map 集合

gradle - 如何设置kotlin编译器的最大内存大小

android - 如何更新 ActionBar 中显示的菜单项?

javascript - 如何在 sidenav 中自动对焦文本框

ios - 这段代码中 'currentDevice' 的类型是什么/如何初始化?

android - 更新当前列表项

kotlin - Kotlin 值类与内联类有何不同?

android - 我可以在 Fragment 中注册 MVP Presenter

android - 调用与 fragment 分离的 asynctask 类

javascript - 模态关闭后自动对焦回到旧盒子