Обеспечение доступности android sidenav с клавиатуры (фокус) - PullRequest
0 голосов
/ 14 января 2020

Я борюсь с понятиями «фокус» в Android. Мой root элемент - это DrawerLayout, который содержит простой GridView и sidenav LinearLayout. Независимо от того, что я пытаюсь, я не могу сделать выбор sidenav с помощью клавиатуры. Помещение focusable / focusableInTouchMode в sidenav ничего не делает, помещая его в кнопку, которая находится внутри sidnav, и делая кнопку nextFocusLeft, делает ее доступной для выбора с помощью клавиатуры, но не расширяет sidenav.

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Main Content -->
    <GridView
        android:id="@+id/channel_list"
        android:numColumns="auto_fit"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!-- Side Nav -->
    <LinearLayout
        android:id="@+id/sidebar"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        >

        <androidx.appcompat.widget.AppCompatToggleButton
            android:id="@+id/sidebar_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOff="@string/proxy_off"
            android:textOn="@string/proxy_on"
            >

        </androidx.appcompat.widget.AppCompatToggleButton>
    </LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout>

GridView Main Контент использует это как элемент:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/TextAppearance.AppCompat.Headline"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:fontFamily="sans-serif-condensed"
    android:gravity="center_vertical"
    android:padding="8dp"
    android:paddingLeft="12dp"
    android:textSize="18sp"
    android:typeface="normal" />

Клавиатура прекрасно перемещается между элементами в сетке, но это все.

Я также пытался использовать панель инструментов AndroidX, она отображалась нормально, но была «захват» фокуса, поэтому переход от элемента к элементу был возможен только внутри элементов панели инструментов. Единственным решением для выделения фокуса было сделать фокусировку самой Панели инструментов, а затем установить ее атрибут nextFocusDown для основного содержимого.

Чего мне не хватает? Есть ли официальная или неофициальная документация о том, как фокус работает в Android?

...