【问题标题】:talkback not focusing by default on any view on start of inner fragment默认情况下,对讲不关注内部片段开始的任何视图
【发布时间】:2020-10-16 02:43:57
【问题描述】:

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

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

请建议我任何帮助将得到高度评价

【问题讨论】:

    标签: kotlin android-fragments autofocus talkback accessibility


    【解决方案1】:

    我已经使用了最好的运气

    view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
    

    在您想要聚焦的视图上,或者可能

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

    让系统做它做的任何事情,然后在片刻之后进入并强制改变焦点。

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

    另外,您可能希望在片段中使用 replace 而不是 add,如果您在旧片段之上添加片段,TalkBack 可能会在查看旧片段上的“不可见”视图时卡住

    【讨论】:

    • 我尝试了 .add 和 .替换但默认情况下内部片段没有获得焦点
    • add 的问题会更多,如果您进行滑动导航并且它专注于您实际上无法再看到的视图,就像它卡在旧片段上一样。 replace 只是避免了这种情况,它不会强制默认焦点。试试AccessibilityEvent 的东西,这对我有用——但只是有时,可访问性真的很难使用:(
    • 谢谢,我刚刚实现了这个,它的工作就像一个魅力
    • 是的,你是对的,我在导航上看到了旧的片段视图
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多