У меня есть четыре поля EditText, которые вместе составляют значение. Каждый ящик должен содержать 1 номер. Когда я ввожу число в один квадрат, фокус должен перейти к следующему полю. Я «подделал» связь между полями, изменив фокус при изменении текста. Следующий код работает, но я хочу разрешить пользователю вставлять значения, которые затем будут разбиты на поля EditText. Поэтому, если я вставляю «123» в поле [0], поле [0] должно содержать «1», а поле [1] должно содержать «2» и т. Д. Я попытался добавить android:maxLength="1"
в XML, но когда я пытаюсь вставить содержимое, проверка maxLength удаляет все, кроме первого символа.Связанные прямоугольники EditText для вставки
Каков наилучший способ разделить содержимое пасты на 4 окна EditText?
EnterNumberLayout.java
public class EnterNumberLayout extends LinearLayout {
EditText[] textBoxes;
public static final int NUMBER_OF_ENTRIES = 4;
public EnterNumberLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOrientation(HORIZONTAL);
textBoxes = new EditText[NUMBER_OF_ENTRIES];
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < NUMBER_OF_ENTRIES; i++){
EditText et = (EditText) inflater.inflate(R.layout.number_box, null);
//et.setOnKeyListener(new BackspaceKeyListener(et));
et.addTextChangedListener(new MoveFocusWatcher(et));
et.setTag(i);
textBoxes[i] = et;
this.addView(et, i);
}
}
private class MoveFocusWatcher implements TextWatcher {
private View view;
public MoveFocusWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if ((int) this.view.getTag() < NUMBER_OF_ENTRIES - 1) {
(textBoxes[(int) this.view.getTag() + 1]).requestFocus();
}
}
public void afterTextChanged(Editable s) {}
}
}
number_box.xml
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="number|none"
android:ellipsize="start"
android:gravity="center_horizontal|center_vertical"
android:imeOptions="actionNext"/>