Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


EditTextPreference ¿Deshabilitar botones?

Quiero tener una EditTextPreference que desactivará el botón Aceptar si no hay texto en el campo EditText. He creado una clase personalizada EditTextPreference y puedo obtener el objeto EditText y establecer un TextWatcher, pero no puedo encontrar una manera de deshabilitar el botón. Parece que simplemente no tengo acceso a los botones Aceptar y Cancelar en el cuadro de diálogo.

Alguien sabe una manera de llegar a estos botones o para hacer lo que estoy tratando de hacer?

Sólo otra opción es intentar crear desde cero un cuadro de diálogo personalizado que se parece y imita a la EditTextPreference.

2 Solutions collect form web for “EditTextPreference ¿Deshabilitar botones?”

Aquí hay un ejemplo de código que habilita / deshabilita el botón dependiendo de si la función onCheckValue devuelve true o false .

 public class ValidatedEditTextPreference extends EditTextPreference { public ValidatedEditTextPreference(Context ctx, AttributeSet attrs, int defStyle) { super(ctx, attrs, defStyle); } public ValidatedEditTextPreference(Context ctx, AttributeSet attrs) { super(ctx, attrs); } private class EditTextWatcher implements TextWatcher { @Override public void onTextChanged(CharSequence s, int start, int before, int count){} @Override public void beforeTextChanged(CharSequence s, int start, int before, int count){} @Override public void afterTextChanged(Editable s) { onEditTextChanged(); } } EditTextWatcher m_watcher = new EditTextWatcher(); /** * Return true in order to enable positive button or false to disable it. */ protected boolean onCheckValue(String value) { return Strings.hasValue(value); } protected void onEditTextChanged() { boolean enable = onCheckValue(getEditText().getText().toString()); Dialog dlg = getDialog(); if(dlg instanceof AlertDialog) { AlertDialog alertDlg = (AlertDialog)dlg; Button btn = alertDlg.getButton(AlertDialog.BUTTON_POSITIVE); btn.setEnabled(enable); } } @Override protected void showDialog(Bundle state) { super.showDialog(state); getEditText().removeTextChangedListener(m_watcher); getEditText().addTextChangedListener(m_watcher); onEditTextChanged(); } } 

Necesita cambiar la antigua EditTextPreference a la nueva ValidatedEditTextPreference en preference.xml.

Hice lo siguiente:

Código antiguo:

 <EditTextPreference android:dialogMessage="Please input your email" android:dialogTitle="Set email" android:key="Email" android:summary="Your email" android:title="-Missed call send to" android:defaultValue="xxx@xxx.xxx"/> 

Nuevo código:

 <com.tanggod.missedcall2mail.ValidatedEditTextPreference android:dialogMessage="Please input your email" android:dialogTitle="Set email" android:key="Email" android:summary="Your email" android:title="-Missed call send to" android:defaultValue="xxx@xxx.xxx"/> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.