Страницы

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

воскресенье, 15 декабря 2019 г.

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

#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, чтобы при вводе символов было видно серым текстом формат.

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

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