#java #android #android_edittext #focus
Как в Android (2.3+) cоздать список полей, например, для ввода IP-адреса. . . ? Причем, чтобы пользователь активировал поле и просто набивал цифры, например 010001225001 -> 10.001.225.001. Если делать строковое поле ввода, то в нем не получается автоматический перескок через точки. Начальное содержимое строкового поля не сохраняется, так что подсказка вида xxx.xxx.xxx.xxx будет стерта вводом и все. Если делать набор полей с цифрами - то по активации первого поля (010) оно так и остается активированным и для перехода во второе поле (001) надо еще раз кликать на следующее поле (фокус остается на первом поле, а надо бы, чтобы он перескочил на второе поле).
Ответы
Ответ 1
Мне кажется, что Вам нужно создать список Ваших 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) { } } Ответ 2
На stackoverlow.com есть множество ответов на этот вопрос. Наиболее простой (но с низким рейтингом):Ответ 3
Задача аналогична форматированию номера телефона. Можно подписаться на TextChangedListener и модифицировать поле ввода. Здесь можно прочитать подробнее. Также для красоты можно переопределить поведение подсказки edittext, чтобы при вводе символов было видно серым текстом формат.
Комментариев нет:
Отправить комментарий