Я борюсь с понятиями «фокус» в 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?