Cómo limitar el texto en números sólo de 0-59 en Editar texto en Android?
Tengo un Edit Text
en el cual el número puede solamente entre 0-59
, ningunos otros números serán mecanografiados en eso que Edit Text
, intenté text-watcher
pero no conseguí éxito. ¿Alguna idea?
12-26 14:59:39.715: E/AndroidRuntime(19494): FATAL EXCEPTION: main 12-26 14:59:39.715: E/AndroidRuntime(19494): java.lang.StackOverflowError 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewShouldExist(View.java:4281) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findUserSetNextFocus(View.java:4263) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.FocusFinder.findNextFocus(FocusFinder.java:66) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:569) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.focusSearch(View.java:4221) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.onCreateInputConnection(TextView.java:5378) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:977) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:932) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2958) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.j
- No se puede insertar en Editable
- Espaciado de letras en EditText para Android
- TextWatcher para más de un EditText
- Eventos de TextWatcher se están llamando dos veces
- Detectar si el contenido de EditText fue modificado por el usuario o por programa?
- Quitar TextChangedListener y volver a agregarlo
- ¿Cómo usar la clase TextWatcher en Android?
- Necesita ayuda para que un TextWatcher de Android funcione con datos de código de barras compuesto entrantes
- Permitir sólo 1 carácter en EditText y siempre sobrescribir cuando el usuario de entrada
- Clase interna dentro de una interfaz que implementa la misma interfaz, ¿qué estamos logrando con esto?
- Android-Editext cambio después de cada cambio
- EditText no se actualiza después de que se cambió el texto en TextWatcher
- TextWatcher llamado incluso si se establece el texto antes de agregar el observador
Utilice este código en XML para permitir números sólo en Editar texto :
<EditText android:id="@+id/edit_text_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:iputType="numbers" />
Para controlar los valores de texto introducidos en ese EditText:
edittext.addTextChangedListener(new TextWatcher(){ public void afterTextChanged(Editable s) {} public void beforeTextChanged(CharSequence s, int start, int count, int after){} public void onTextChanged(CharSequence s, int start, int before, int count){ String strEnteredVal = edittext.getText().toString(); if(!strEnteredVal.equals("")){ int num=Integer.parseInt(strEnteredVal); if(num<60){ edittext.setText(""+num); }else{ edittext.setText(""); } } });
Aquí es cómo me gusta hacer esto:
public class InputFilterMinMax implements InputFilter { private int min; private int max; public InputFilterMinMax(int min, int max) { this.min = min; this.max = max; } @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { //noinspection EmptyCatchBlock try { int input = Integer.parseInt(dest.subSequence(0, dstart).toString() + source + dest.subSequence(dend, dest.length())); if (isInRange(min, max, input)) return null; } catch (NumberFormatException nfe) { } return ""; } private boolean isInRange(int a, int b, int c) { return b > a ? c >= a && c <= b : c >= b && c <= a; } }
A continuación, establezca el filtro en su EditText:
myEditText.setFilters(new InputFilter[]{new InputFilterMinMax(0, 59)});
Primero Agregue el tipo de entrada como número y limite el número de entradas para editText.
editText.setInputType( InputType.TYPE_CLASS_NUMBER ); InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(2); editText.setFilters(FilterArray);
entonces
Agregue un TextWatcher
para comprobar qué tipo de usuario si el valor es más de 59 mostrar una alerta o cualquier mensaje que el número será inferior a 60.
editText.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub String added_number = editText.getText().toString(); if (added_number.length != 0) { int number = Integer.parseInt(added_number); if (number > 59) Toast.makeText(getApplicationContext, "Not more than 59", Toast.LENGTH_SHORT).show(); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub });
void addAddTextChangeListener(final EditText et) { et.addTextChangedListener(new TextWatcher() { boolean textModified = false; @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) { String strEnteredVal = et.getText().toString(); if(!strEnteredVal.equals("") && !(strEnteredVal.length() < 2)) { int num = Integer.parseInt(strEnteredVal); if (!textModified) { if (num > 60) { et.setText(""); } else { textModified = true; et.setText("" + num); et.setEnabled(false); } } } } }); }
android:inputType="number"
en la entrada EditText
en xml-file. Pero este código deja de funcionar una vez que recibe la entrada correcta, por lo que debe desactivar EditText
después de eso.