Как ограничить текст цифрами только с 0-59 в редакторе текста в Android?

У меня есть Edit Text в котором число может быть только между 0-59 , Никакие другие номера не будут введены в Edit Text , я попробовал text-watcher но не получил успеха. Есть идеи?

 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 

Используйте этот код в XML, чтобы разрешать номера только в редакторе текста :

 <EditText android:id="@+id/edit_text_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:iputType="numbers" /> 

Чтобы управлять текстовыми значениями, введенными в этом 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(""); } } }); 

Вот как мне это нравится:

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

Затем установите фильтр в EditText:

 myEditText.setFilters(new InputFilter[]{new InputFilterMinMax(0, 59)}); 

Сначала добавьте тип ввода как число и ограничьте количество ввода для editText.

 editText.setInputType( InputType.TYPE_CLASS_NUMBER ); InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(2); editText.setFilters(FilterArray); 

тогда

Добавьте TextWatcher чтобы проверить, что пользователь TextWatcher если значение более 59 показывает предупреждение или любое сообщение, количество которого будет меньше 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" в записи EditText в xml-файле. Но этот код перестает работать, как только он получает правильный ввод, поэтому после этого вы должны отключить EditText .

Intereting Posts