2013-06-10 5 views
1

У меня есть три смежных поля EditText, каждый из которых заполняется 6 символами выбора пользователя. То, что я хочу, состоит в том, что, как только пользователь закончит ввод 6-го символа в первом поле EditText, курсор автоматически переключится во второе поле EditText. То же самое для второго -> третьего. Как я могу это сделать?Перемещение курсора в поле EditText? Android

ответ

1

Просто введите KeyListener в ваш первый EditText (скажем, editTextOne).
На каждой нажатой клавише проверьте, равна ли длина editTextOne равным 6, и переместите курсор ко второму, вызвав метод requestFocus() на ваш второй editText (т. Е. editTextTwo.requestFocus()).

+0

Это сработало, спасибо! – scibor

+0

@scibor Нет проблем =) –

+0

Также последующий вопрос, после ввода последней введенной 6-символьной записи, как заставить клавиатуру закрыть экран? Я думаю, что это тесно связано? – scibor

1

использовать как этот

edittext1.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(edittext1.getText().toString().length()==6) { 
      edittext2.requestFocus(); 
     } 
     return false; 
    } 
}); 
0

Попробуйте это.

mEtText.addTextChangedListener (новый TextWatcher() {

 @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 
      if(mEtText.getText().length() == 6){ 
       secondEditText.requestFocus(); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }); 
0

Необходимо в данном случае использовать соответствующий приемник: TextWatcher

Взаимодействуя с кодом ниже:

package com.example.stackoverflow; 

import android.os.Bundle; 
import android.app.Activity; 
import android.text.Editable; 
import android.text.InputFilter; 
import android.text.TextWatcher; 
import android.view.Menu; 
import android.widget.EditText; 
import android.widget.Toast; 

public class SimpleActivity10 extends Activity { 

    private final short MAXCHAR = 6; 

    private EditText editText1, editText2, editText3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.simple_activity10); 
     editText1 = (EditText) this.findViewById(R.id.editText1); 
     editText2 = (EditText) this.findViewById(R.id.editText2); 
     editText3 = (EditText) this.findViewById(R.id.editText3); 

     editText1.addTextChangedListener(textWatcher1); 
     editText2.addTextChangedListener(textWatcher2); 

     InputFilter[] FilterArray = new InputFilter[1]; 
     FilterArray[0] = new InputFilter.LengthFilter(MAXCHAR); 
     editText1.setFilters(FilterArray); 
     editText2.setFilters(FilterArray); 
     editText3.setFilters(FilterArray); 

    } 

    private TextWatcher textWatcher1 = new TextWatcher() { 

     @Override 
     public void afterTextChanged(Editable editable) { 
      int messageLength = editable.toString().length(); 
      if (messageLength == MAXCHAR) { 
       Toast.makeText(getApplicationContext(), "EditText 2 get focus!", Toast.LENGTH_SHORT).show(); 
       editText2.requestFocus(); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

    }; 

    private TextWatcher textWatcher2 = new TextWatcher() { 

     @Override 
     public void afterTextChanged(Editable editable) { 
      int messageLength = editable.toString().length(); 
      if (messageLength == MAXCHAR) { 
       Toast.makeText(getApplicationContext(), "EditText 3 get focus!", Toast.LENGTH_SHORT).show(); 
       editText3.requestFocus(); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

    }; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.simple_activity10, menu); 
     return true; 
    } 

} 

И макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".SimpleActivity10" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" /> 

    <EditText 
     android:id="@+id/editText3" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" /> 

</LinearLayout> 
Смежные вопросы