2014-10-18 4 views
5

Я работаю над проектом android, и я использую android:nextFocusButton, чтобы пользователь мог нажать следующую кнопку на мягкой клавиатуре, чтобы перейти через EditText, не нажимая каждый отредактированный текст, чтобы изменить фокус.android: nextFocusForward is wrong to EditText

В макете я прошу для пользователей по фамилии и имени, в отдельном EditText в линейной макете, который находится в горизонтальном

Затем на следующей строке, в другой линейной компоновки, я тогда спросить для название компании. Ниже приведен снимок экрана, чтобы показать, что я имею в виду.

Basic Screen Layout

То, что я пытаюсь сделать, это в первом тексте имени редактирования, пользователь может нажать ряд, который должен затем переключить фокус на последний текст имени редактирования, они затем нажмите следующий раз, и она двигается компании редактировать текст.

Вместо того, что происходит, первое имя имеет фокус, пользователь нажимает следующую кнопку, и он переходит к компании вместо текста вместо текста.

Ниже приведен фрагмент моего макета 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"/> 

Спасибо за любую помощь вы можете предоставить.

+1

пытаются добавить андроид: imeOptions = "actionNext" –

ответ

7

просто поместите это в свой первый редактор. Также замените 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> 

Это, кажется, прослушивается при выполнении этого кода на эмуляторе. Однако он работает на телефонах

+0

Переход к nextFocusDown, кажется, работает. Я не тестирую эмулятор, используя 2012 Nexus 7. – Boardy

+0

также работает для меня! –

3

Возможно, ваш XML игнорируется алгоритмом фокуса Android. Документация гласит следующее:

В редких случаях алгоритм по умолчанию может не соответствовать заданному поведению разработчика . В этих ситуациях вы можете обеспечить явные переопределения со следующими атрибутами XML в макете файл: nextFocusDown, nextFocusLeft, nextFocusRight и nextFocusUp.

У меня была аналогичная проблема, и я решил его с помощью nextFocusDown.

Подробнее о official documentation

1

Ни одно из решений работали для меня прослушивания редактора действий слушателя и программной настройки фокуса на следующий EditText исключения.

mFirstName.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      mLastName.requestFocus(); 
      return true; 
     } 
    });