微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对讲默认不在内部片段开始时聚焦于任何视图

如何解决对讲默认不在内部片段开始时聚焦于任何视图

我正在使用可访问性对讲功能,并且遇到一个问题,我在父活动中有一个底部导航,并且从设置选项卡中,我使用.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"

并请求焦点,但无法正常工作

请建议我给予任何帮助

解决方法

我运气最好

view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)

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

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

让系统做任何事情,然后过一会儿跳入并强制改变焦点。

但是,如果这干扰了通常的导航,则可能会被认为是不良的可访问性,这可能就是为什么很难始终如一地集中精力的原因!最好只是宣布新的片段(用view.announceForAccessibility("new fragment")之类的符号,然后让用户从顶部开始导航可能会更好。这取决于您的应用,是您的通话

此外,您可能想使用replace代替add来创建片段,如果您在一个旧片段的顶部添加一个片段,TalkBack可能会卡住该片段上的“不可见”视图旧片段

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。