Страницы

Поиск по вопросам

среда, 24 октября 2018 г.

Как в Android создать набор полей с автопереходом между ними?

Как в Android (2.3+) cоздать список полей, например, для ввода IP-адреса ... ? Причем, чтобы пользователь активировал поле и просто набивал цифры, например 010001225001 -> 10.001.225.001. Если делать строковое поле ввода, то в нем не получается автоматический перескок через точки. Начальное содержимое строкового поля не сохраняется, так что подсказка вида xxx.xxx.xxx.xxx будет стерта вводом и все. Если делать набор полей с цифрами - то по активации первого поля (010) оно так и остается активированным и для перехода во второе поле (001) надо еще раз кликать на следующее поле (фокус остается на первом поле, а надо бы, чтобы он перескочил на второе поле).


Ответ

Мне кажется, что Вам нужно создать список Ваших EditText. Затем на каждый EditText повесить по TextWatcher'у и при достижении в каждом из них 3-х цифр переводить фокус на следующий EditText. Так, моя догадка была верна. Вот Вам работающий код. Извините, написан чуть некрасиво, но я проверил - всё работает так, как Вы описали в вопросе. Это самый простой xml с 4-мя EditText.




А это уже само Activity, в котором происходит нужная работа. package com.blogspot.leved_notes.answerhashcode;
import java.util.ArrayList;
import android.os.Bundle; import android.app.Activity; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText;
public class MainActivity extends Activity implements TextWatcher {
int current; ArrayList array;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
current = 0; array = new ArrayList(4);
EditText edit1 = (EditText) findViewById(R.id.editText1); EditText edit2 = (EditText) findViewById(R.id.editText2); EditText edit3 = (EditText) findViewById(R.id.editText3); EditText edit4 = (EditText) findViewById(R.id.editText4);
edit1.addTextChangedListener(this); edit2.addTextChangedListener(this); edit3.addTextChangedListener(this); edit4.addTextChangedListener(this);
array.add(0, edit1); array.add(1, edit2); array.add(2, edit3); array.add(3, edit4); }
@Override public void afterTextChanged(Editable s) { if (s.length() == 3) { current++; if (current < 4) { array.get(current).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) { }
}

Комментариев нет:

Отправить комментарий