Android辅助功能 - 无法专注于Appbar中的任何元素

问题描述 投票:3回答:2

我在我的两个活动中遇到了这个问题。当我使用键盘Tab键或箭头键导航时 - 我无法访问App栏中的任何元素。

1)活动1 - >我的appbar有一个汉堡菜单图标来访问NavigationView。我无法点击此图标。如果我触摸菜单图标 - 我可以使用键盘在菜单项中上下导航。但是我如何进入菜单?

2)活动2 - 我有一个CoordinatorLayout,里面有一个CollapsingToolbarLayout和一个NestedScrollView。我能够导航到NestedScrollView的所有元素。但是我无法访问CollapsingToolbarLayout内工具栏上的任何按钮。这有一个收藏夹按钮和一个选项菜单 - 溢出图标和1我总是在appbar上显示。我如何联系这些图标?

这是活动2的布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/detail_app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="@dimen/place_detail_appbar_height"
            android:elevation="@dimen/place_detail_appbarlayout_elevation">
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/detail_collapsing_toolbar_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorPrimary"
                android:transitionGroup="false"
                app:collapsedTitleGravity="start"
                app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
                app:contentScrim="?attr/colorPrimary"
                app:expandedTitleMarginStart="72dp"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <ImageView
                    android:id="@+id/detail_app_bar_photo"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:scaleType="centerCrop"
                    app:layout_collapseMode="parallax"
                    android:background="@color/colorPrimary"
                    android:contentDescription="@string/place_image"
                    android:transitionName="@string/shared_photo"
                    style="@style/ToolbarImage"/>

                <android.support.v7.widget.Toolbar
                    android:id="@+id/detail_toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/place_detail_toolbar_height"
                    android:background="@color/colorAccent"
                    app:layout_collapseMode="pin"
                    android:layout_gravity="bottom"
                    android:theme="@style/AppTheme.ToolbarColored">

                    <LinearLayout
                        android:id="@+id/meta_bar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="start"
                        android:background="@android:color/transparent"
                        android:orientation="horizontal">

                        <TextView
                            android:id="@+id/toolbar_place_name"
                            style="@style/ToolbarName"
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="4"
                            android:layout_gravity="center_vertical|start"
                            tools:text="OFJCC Gym and Recreation Center" />
                        <ImageView
                            android:id="@+id/toolbar_fav_icon"
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            app:srcCompat="@drawable/ic_favourite_border"
                            android:tag="favorite_border"
                            android:layout_gravity="center"
                            android:focusable="true"
                            android:contentDescription="@string/favorite_desc"/>

                    </LinearLayout>

                </android.support.v7.widget.Toolbar>

            </android.support.design.widget.CollapsingToolbarLayout>

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:nextFocusUp="@+id/toolbar_fav_icon"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <include layout="@layout/place_details_content"/>

        </android.support.v4.widget.NestedScrollView>

    </android.support.design.widget.CoordinatorLayout>

</FrameLayout>

我无法访问toolbar_fav_icon ImageView

这两种情况之间唯一的共同点是,在这两种情况下 - 我在Appbar上遇到问题时遇到问题。我是一个新手,可能会有一些超级明显的东西我不知道。请耐心帮助我!

谢谢!

Apurva

android navigation-drawer android-collapsingtoolbarlayout android-appbarlayout android-accessibility
2个回答
0
投票

在实现可访问性的同时,几乎总会有一些来自元素焦点的来回游戏,直到你得到它为止。

现在针对您的问题,如果仍然相关,如果不是未来寻求者 -

使用辅助功能时,请确保要获得焦点的每个元素都具有importantforaccessibility属性

android:importantForAccessibility="yes"

在您的情况下,如果我理解正确,您不需要TalkBack的辅助功能焦点,而是使用键盘导航。所以基本上只要确保你想要获得焦点的每个元素都设置为可聚焦真实。

android:focuable="true" 

这些是玩焦点的基础知识。

额外点 -

如果您希望以编程方式使某些内容获得焦点,如果它在加载时或当有人被点击时您可以使用以下代码 -

myCustomView.post(new Runnable() {
        @Override
        public void run() {
            myCustomView.requestFocus();
            myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
        }
    });

这不一定是在post函数中,但如果它在某些情况下不在一个中,则它落在行之间并且不会获得焦点。


0
投票

您是否尝试按下键组合Cmd + Tab(在Mac上)或Ctrl + Tab(在Windows上)?

Android引入了键盘导航集群的新概念,并将标记的工具栏标记为API 26+的导航集群。因此,仅通过Tab键无法访问工具栏元素,您需要使用“元标签”(Ctrl / Cmd + Tab)访问API 26及更高版本设备的工具栏。

© www.soinside.com 2019 - 2024. All rights reserved.