Установка EditText imeOptions в actionNext не влияет при использовании цифр
вот мой edittext: -
<com.os.fastlap.util.customclass.EditTextPlayRegular
android:id="@+id/full_name_et"
style="@style/Edittext_white_13sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_5sdp"
android:background="#00ffffff"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:imeOptions="actionNext"
android:inputType="text"
android:maxLength="20"
android:maxLines="1"
android:nextFocusDown="@+id/last_name_et"
android:textCursorDrawable="@null" />
когда я удалить digit
в edittext он работает нормально, но с digit
imeOptions
не работает. Но одна удивительная вещь, если я использую singleLine
вместо maxLines он работает нормально. Но!--4--> теперь устарел. Я не могу удалить цифру в моем EditText и я не хочу использовать устаревший метод. Любой может решить эту проблему. Спасибо в adavance
6 ответов
вот упрощенное решение с помощью кнопки клавиатуры программного обеспечения "Next":
final String NOT_ALLOWED_CHARS = "[^a-zA-Z0-9]+";
final EditText editText = (EditText) findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher() {
@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 void afterTextChanged(Editable s) {
if (!TextUtils.isEmpty(s)) {
// remove the listener to avoid StackoverflowException
editText.removeTextChangedListener(this);
// replace not allowed characters with empty strings
editText.setText(s.toString().replaceAll(NOT_ALLOWED_CHARS, ""));
// setting selection moves the cursor at the end of string
editText.setSelection(editText.getText().length());
// add the listener to keep watching
editText.addTextChangedListener(this);
}
}
});
здесь регулярное выражение [^a-zA-Z0-9]+
соответствует допустимым значениям android:digits
на EditText
В вопрос.
можно использовать
android:lines="1"
на месте
android:maxLines
или
android:singleLine="true".
Я знаю, что вы пробовали много решений, попробуйте с
android:lines="1"
если вы еще не пробовали раньше.
проблема в том, что вы нажимаете клавишу Enter вместо actionNext, который вам нужен, чтобы переместить курсор на следующий EditText
укажите метод ввода Action
наиболее мягкие методы ввода кнопки действий пользователей в дне угол, соответствующий текущему текстовому полю. По умолчанию система использует эту кнопку для следующего или выполненного действия, если текстовое поле позволяет многострочный текст (например, с android:inputType= "textMultiLine"), в этом случае кнопка действия возврат каретки. Однако можно указать дополнительные действия, которые может быть более подходящим для вашего текстового поля, например Send или Go.
это вызывает возврат каретки для вашей кнопки действия. Так это значит, что не стреляет android:nextFocusDown
прежде всего, давайте посмотрим, в чем разница между singleLine, который является устаревшим и maxlines, которое
singleLine
при установке android:singleLine="true"
текст одной строки в EditText виден, но клавиша Enter не видна на клавиатуре
maxlines, которое
при установке android:maxLines
атрибут с определенным значением только тот же объем текста строки виден в EditText и введите ключ в клавиатуре также виден для ввода.
поэтому, когда вы нажимаете кнопку действия, она запускает Enter Действия по коду. Также вы должны изменить свой атрибут inputType с помощью android:inputType="textMultiLine"
если вы используете android:maxLines
атрибут
maxlines, которое
добавлено в API level 1 int maxLines делает TextView не более этого много линий высотой. При использовании в редактируемом тексте inputType значение атрибута должно быть объединено с флагом textMultiLine для атрибут maxLines для применения.
может быть целочисленным значением, например "100".
когда я настроил ваш код с правильными атрибутами, он все еще запускал клавишу Enter вместо IME_ACTION_NEXT что вы хотите. Я думаю, что это не решило проблему из-за
textMultiLine можно совместить с текстом и своими изменениями для того чтобы позволить несколько строк текста в поле. Если этот флаг не установлен, текст поле будет ограничено одной строкой. Соответствовать TYPE_TEXT_FLAG_MULTI_LINE.
TYPE_TEXT_FLAG_MULTI_LINE
добавлен в API уровня 3 int Type_text_flag_multi_line флаг для TYPE_CLASS_TEXT: в поле можно ввести несколько строк текста. Если этот флаг не установлен, текстовое поле будет ограничено одна строка. IME может также выберите Не отображать клавишу enter, когда этот флаг не установлен, так как нет необходимости создавать новые русло.
постоянное значение: 131072 (0x00020000)
устранение:
подкласс EditText и настроить параметры IME. После этого вам не нужно android:maxLines
или android:singleLine
атрибуты.
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
InputConnection connection = super.onCreateInputConnection(outAttrs);
int imeActions = outAttrs.imeOptions&EditorInfo.IME_MASK_ACTION;
if ((imeActions&EditorInfo.IME_ACTION_NEXT) != 0) {
// clear the existing action
outAttrs.imeOptions ^= imeActions;
// set the DONE action
outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT;
}
if ((outAttrs.imeOptions&EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
}
return connection;
}
вы также можете проверить другой должности здесь. Я перенастроил принятый ответ этого поста на вашу цель
android:digits
указывает, что EditText имеет числовой метод ввода, согласно docs
можно использовать android:inputType="personName"
для достижения своей digits
attr
android:maxLines
только делает TextView максимум это много строк высотой, не запретить пользователю вводить больше символов.
то же самое с android:lines
Это только делает TextView ровно много строк в высоту.
код решение для вашего решения, как показано ниже,
XML-файла
<EditText
android:id="@+id/full_name_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5sp"
android:background="#00ffffff"
android:imeOptions="actionNext"
android:inputType="text"
android:maxLines="1"
android:maxLength="20"
android:textCursorDrawable="@null" />
Java:
final EditText edtfirstName = (EditText) findViewById(R.id.full_name_et);
edtfirstName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
if (charSequence.toString().startsWith(" ")) {
String result = charSequence.toString().replace(" ", "").replaceAll("[^a-zA-Z]+", "");
if (!charSequence.toString().equals(result)) {
edtfirstName.setText(result);
edtfirstName.setSelection(result.length());
}
} else {
String result = charSequence.toString().replaceAll("[^a-zA-Z ]+", "");
if (!charSequence.toString().equals(result)) {
edtfirstName.setText(result);
edtfirstName.setSelection(result.length());
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});