#android
#Android
Вопрос:
У меня есть макет, в котором есть верхний, нижний колонтитулы и scrollview между ними
Это мой макет
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@ id/header"
android:text="@string/player_settings" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@ id/footer"
android:layout_below="@id/header">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:orientation="vertical">
.....
<Button
android:id="@ id/start"
android:layout_marginStart="@dimen/text_margin"
android:layout_marginTop="@dimen/text_margin"
android:paddingStart="@dimen/button_padding"
android:paddingEnd="@dimen/button_padding"
android:text="Start" />
<Button
android:id="@ id/close"
android:layout_marginStart="@dimen/text_margin"
android:layout_marginTop="@dimen/text_margin"
android:layout_marginBottom="32dp"
android:paddingStart="@dimen/button_padding"
android:paddingEnd="@dimen/button_padding"
android:text="Close"
android:nextFocusDown="@ id/save"/>
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@ id/footer"
android:layout_alignParentBottom="true">
<Button
android:id="@ id/save"
android:layout_marginStart="16dp"
android:text="Save" />
</LinearLayout>
</RelativeLayout>
Приложение будет использоваться с клавиатурой, поэтому я использую кнопки со стрелками для навигации, и когда я нажимаю нижнюю часть scrollview на close
кнопку, она должна перейти к кнопке сохранения, но она просто остается на кнопке закрытия. Как вы можете видеть, я даже установил nextFocusDown
в качестве кнопки сохранения, но она все еще не включается.
Есть идеи, почему он застревает на кнопке и никогда не переходит к кнопке сохранения за пределами scrollview?
Комментарии:
1. Вы пытаетесь использовать реальное устройство? Я попробовал ваш XML, и он работает на моем эмуляторе
2. да, фактическое устройство, но, возможно, это устройство тогда
3. Вы уже пробовали ответ Ронни??
Ответ №1:
Я пробовал с эмулятором и стрелкой вниз на клавиатуре ноутбука. Мои настройки эмулятора настроены на использование физической клавиатуры. это работает.
Ответ №2:
Вам нужно добавить фокус к кнопкам со свойством Android: android:focusableInTouchMode="true"
и в соответствии со стрелками, нажатыми для навигации с помощью клавиатуры, вам нужно добавить следующие свойства с идентификатором, к которому вы хотите перейти:
⬅ android: nextFocusLeft=»@ id / nameid»
⬆ android: nextFocusUp =»@ id / nameid»
➡ android: nextFocusRight=»@ id / nameid»
⬇ android: nextFocusDown=»@ id / nameid»
Это ваш макет с моими исправлениями:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@ id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/player_settings"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@ id/footer"
android:layout_below="@id/header">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:orientation="vertical"
android:layout_gravity="center">
<EditText
android:id="@ id/edit_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
android:singleLine="true"/>
<Button
android:id="@ id/start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:layout_marginStart="@dimen/text_margin"
android:layout_marginTop="@dimen/text_margin"
android:paddingStart="@dimen/button_padding"
android:paddingEnd="@dimen/button_padding"
android:text="Start"
android:nextFocusRight="@ id/close"/>
<Button
android:id="@ id/close"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:layout_marginStart="@dimen/text_margin"
android:layout_marginTop="@dimen/text_margin"
android:layout_marginBottom="32dp"
android:paddingStart="@dimen/button_padding"
android:paddingEnd="@dimen/button_padding"
android:text="Close"
android:nextFocusRight="@ id/save"
android:nextFocusLeft="@ id/start"/>
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@ id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<Button
android:id="@ id/save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:nextFocusLeft="@ id/close"
android:text="Save" />
</LinearLayout>
</RelativeLayout>