android: nextFocusForward идет в неправильный EditText
Я работаю над проектом android, и я использую android:nextFocusButton
таким образом, пользователь может нажать кнопку Далее на мягкой клавиатуре для перемещения по EditText без необходимости нажимать каждый текст редактирования, чтобы изменить фокус.
в макете я прошу пользователей по имени и фамилии, в отдельном EditText в линейном макете, который находится в горизонтальном
затем на следующей строке, в другом линейном макете, я затем спрашиваю название компании. Ниже приведен скриншот, чтобы показать что я имею в виду.
то, что я пытаюсь сделать, это в первом имени редактировать текст, пользователь может нажать next, который затем должен переключить фокус на последнее имя редактировать текст, затем они снова нажмите next, и он переходит к тексту редактирования компании.
вместо того, что происходит, это первое имя имеет фокус, пользователь нажимает кнопку Далее, и он переходит к тексту редактирования компании вместо фамилии.
Ниже приведен фрагмент моего XML макет
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText android:id="@+id/createAccount_txtFirstName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/first_name"
android:singleLine="true"
android:inputType="textCapSentences"
android:nextFocusForward="@+id/createAccount_txtLastName"/>
<EditText android:id="@+id/createAccount_txtLastName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/last_name"
android:singleLine="true"
android:inputType="textCapSentences"
android:nextFocusForward="@+id/createAccount_txtCompanyName"/>
</LinearLayout>
<EditText android:id="@+id/createAccount_txtCompanyName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/company_name"
android:singleLine="true"
android:inputType="textCapSentences"
android:nextFocusForward="@+id/createAccount_txtEmail"/>
Спасибо за любую помощь вы можете предоставить.
3 ответов
просто поместите это в свой первый edittext. Также замените nextFocusForward на nextFocusDown
<EditText android:id="@+id/createAccount_txtFirstName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/first_name"
android:singleLine="true"
android:inputType="textCapSentences"
android:nextFocusDown="@+id/createAccount_txtLastName">
<requestFocus />
</EditText>
Кажется, что он прослушивается при запуске этого кода на эмуляторе. Тем не менее, он работает на телефонах
возможно, ваш XML игнорируется алгоритмом Android focus. Документация гласит следующее:
в редких случаях, алгоритм по умолчанию может не соответствовать назначению поведение разработчика. В этих ситуациях вы можете предоставить явные переопределения со следующими атрибутами XML в макете файл: nextFocusDown, nextFocusLeft, nextFocusRight и nextFocusUp.
У меня была аналогичная проблема, и я решил ее с помощью nextFocusDown.
подробнее о официальная документация
ни одно из решений не работало для меня, за исключением прослушивания прослушивателя действий редактора и программной установки фокуса на следующий EditText.
mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
mLastName.requestFocus();
return true;
}
});