validar style studio solo propiedades obtener numeros example eventos edittext datos android android-edittext

android - style - Establecer EditText imeOptions en actionNext no tiene ningún efecto cuando se usan dígitos



propiedades edittext android (6)

Aquí hay una solución simplificada con el botón del teclado del software "Siguiente":

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); } } });

Aquí la expresión regular [^a-zA-Z0-9]+ corresponde a los valores permitidos de android:digits del EditText en cuestión.

Aquí mi 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" />

Cuando elimino un digit en el texto de edición funciona bien, pero con imeOptions digit no funciona. Pero una cosa sorprendente si uso singleLine lugar de maxLines funciona bien. Pero singleLine ahora está en desuso. No puedo eliminar el dígito en mi edittext y no quiero usar el método en desuso . Cualquiera puede resolver este problema. Gracias en adavance


El código de solución para su solución es el siguiente,

Archivo 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) { } });


El problema es que está haciendo clic en la tecla Intro en lugar de en la acción Siguiente que necesita para mover el cursor al siguiente EditarTexto

Especifique la acción del método de entrada

La mayoría de los métodos de entrada flexibles proporcionan un botón de acción del usuario en la esquina inferior que es apropiado para el campo de texto actual. Por defecto, el sistema usa este botón para una acción Siguiente o Hecho a menos que su campo de texto permita texto de varias líneas (como android: inputType = "textMultiLine"), en cuyo caso el botón de acción es un retorno de carro. Sin embargo, puede especificar acciones adicionales que podrían ser más apropiadas para su campo de texto, como Enviar o Ir.

Causa retorno de carro para su botón de acción. Entonces, eso significa que no se dispara android:nextFocusDown

En primer lugar, veamos cuál es la diferencia entre singleLine que está en desuso y maxLines

linea sola

Cuando configura android:singleLine="true" una línea de texto está en EditText visible, pero la tecla Enter no está visible en el teclado

lineas maximas

cuando configura el atributo android:maxLines con el valor particular, solo la misma cantidad de texto de línea es visible en EditText e ingrese la tecla en el teclado también visible para Ingreso.

Por lo tanto, cuando haga clic en el botón de acción, se activará Enter Action según su código. También debe cambiar su atributo inputType con android:inputType="textMultiLine" si usa el atributo android:maxLines

lineas maximas

agregado en el nivel de API 1 int maxLines Hace que TextView sea como máximo esta cantidad de líneas. Cuando se usa en un texto editable, el valor del atributo inputType se debe combinar con el indicador textMultiLine para que se aplique el atributo maxLines.

Puede ser un valor entero, como "100".

Cuando personalicé su código con los atributos correctos, todavía estaba disparando la tecla Enter en lugar de IME_ACTION_NEXT que desea. Creo que no resolvió el problema debido a

textMultiLine Se puede combinar con texto y sus variaciones para permitir múltiples líneas de texto en el campo. Si este indicador no está configurado, el campo de texto estará restringido a una sola línea. Corresponde a TYPE_TEXT_FLAG_MULTI_LINE.

TYPE_TEXT_FLAG_MULTI_LINE

agregado en el nivel 3 de la API int TYPE_TEXT_FLAG_MULTI_LINE Marcador para TYPE_CLASS_TEXT: se pueden ingresar varias líneas de texto en el campo. Si este indicador no está configurado, el campo de texto estará restringido a una sola línea. El IME también puede elegir no mostrar una tecla Intro cuando este indicador no está configurado, ya que no debería haber necesidad de crear nuevas líneas.

Valor constante: 131072 (0x00020000)

SOLUCIÓN:

Subclase EditText y ajuste las opciones de IME. Después de eso, no necesitas android:maxLines o android:singleLine atributos de una 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; }

También puedes consultar otra publicación aquí . He reconfigurado la respuesta aceptada de esta publicación en tu propósito


puedes usar

android:lines="1"

en lugar de

android:maxLines

o

android:singleLine="true".

Sé que has probado muchas soluciones, prueba con

android:lines="1"

estos si no has intentado antes.


android:digits especifica que EditText tiene un método de entrada numérica, según los documentos

Puedes usar android:inputType="personName" para lograr lo mismo que tus digits actuales attr


android:maxLines only Hace que TextView sea como máximo esta cantidad de líneas, no impide que el usuario ingrese más caracteres.

Lo mismo con android:lines que solo hacen que TextView sea exactamente así de muchas líneas.