Редактировать текстовый фокус в android

В моем приложении я отредактировал текст следующим образом.

EditText1   EditText2
EditText3   EditText4
EditText5   EditText6

в xml я объявил android:imeOptions="actionNext", а также я пишу

          editText1.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                // TODO Auto-generated method stub
                 if (actionId == EditorInfo.IME_ACTION_DONE ||   actionId == EditorInfo.IME_ACTION_NEXT) {
                     editText2.requestFocus();

                  return false;
                  }
                return false;
            }
         });

Теперь на виртуальной клавиатуре при редактировании текста 1, если я нажму «Далее», я перейду на edit text3 вместо editText2 и т. Д.

Как я могу сосредоточиться на EditText2 вместо edittext3 для моего пользователя приложения, нажимая только «Далее или готово», он никогда не использует трекбол.


person Kiran_b    schedule 03.11.2011    source источник


Ответы (3)


Вы можете попробовать добавить атрибут android:nextFocusDown в свой EditTexts.

person Arnab Chakraborty    schedule 03.11.2011
comment
Я поставил следующий фокус, но бесполезно - person Kiran_b; 03.11.2011
comment
Не могли бы вы выложить код, где вы добавили android:nextFocusDown. Просто xml для нескольких EditTexts. - person Arnab Chakraborty; 03.11.2011
comment
дааа, после того, как в коде указан идентификатор nextfocus, он работает нормально, спасибо за вашу поддержку - person Kiran_b; 04.11.2011

Я только что протестировал ваш код со следующим макетом, и он сработал, как ожидалось. (Ожидается = при нажатии на кнопку «Далее» на виртуальной клавиатуре фокус был передан в editText2)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_gravity="center"
android:padding="15dip">
<LinearLayout android:orientation="vertical"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:layout_gravity="center" android:paddingLeft="20dip"
    android:paddingRight="20dip">
    <TableLayout android:layout_height="wrap_content"
        android:layout_width="wrap_content" android:layout_gravity="center"
        android:stretchColumns="*">

        <TableRow>
            <EditText android:id="@+id/edt1" />
            <EditText android:id="@+id/edt2" />
        </TableRow>

        <TableRow>
            <EditText android:id="@+id/edt3" />
            <EditText android:id="@+id/edt4" />
        </TableRow>

        <TableRow>
            <EditText android:id="@+id/edt5" />
            <EditText android:id="@+id/edt6" />
        </TableRow>


    </TableLayout>
</LinearLayout>

Here's also the source

package com.stackoverflow.test;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.inputmethod.EditorInfo;
    import android.widget.EditText;
    import android.widget.TextView;

public class TestEditTextFocusActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    EditText editText1 = (EditText)findViewById(R.id.edt1);
    final EditText editText2 = (EditText)findViewById(R.id.edt2);

    editText1.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId,
                KeyEvent event) {
          if (actionId == EditorInfo.IME_ACTION_DONE ||   
                  actionId == EditorInfo.IME_ACTION_NEXT) {
           editText2.requestFocus();
            return false;
          }

            return false;
        }
   });
}

}

person hovanessyan    schedule 03.11.2011
comment
Я использую Eclipse Indigo и предоставленный эмулятор. Цель - Android 2.2 (уровень API 8). Итак, если вы создаете новый проект и просто копируете и вставляете код, он у вас не работает? - person hovanessyan; 03.11.2011

 ed1.setOnEditorActionListener(new EditText.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    // TODO Auto-generated method stub
                     if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT) {
                        ed1.setNextFocusDownId(R.id.ed2);

                      return false;
                      }
                    return false;
                }
             });

После написания приведенного выше кода моя проблема решена. Спасибо всем за ответы и поддержку.

person Kiran_b    schedule 04.11.2011