style - validar edittext numeric android




Establecer EditText imeOptions en actionNext no tiene ningún efecto cuando se usan dígitos (4)

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


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 Exception
                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.


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) {

        }
    });

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-edittext