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 

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.

  • Cómo sólo permitir números positivos en un EditText
  • Android edittext onchange escucha
  • ¿Cómo utilizar Single TextWatcher para múltiples EditTexts?
  • Android utiliza el observador de texto para evitar escribir caracteres especiales
  • ¿Cómo eliminar inmediatamente el espacio de un edittext si un usuario presiona el espacio?
  • ¿Cómo utilizo AsYouTypeFormatter TextWatcher en la aplicación de Android?
  • Detectar retroceso en TextWatcher
  • Reemplazar el carácter dentro de TextWatcher en android
  • Agregar automáticamente guión en el número de teléfono en Android
  • Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged
  • Validación de EditText con TextWatcher
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.