#java #android #kotlin #exception
Вопрос:
Если я установлю ограничение по длине для редактируемого текста либо с помощью xml
android:maxLength="6"
или использовать фильтры с Java/Kotlin
editText.filters = arrayOf<InputFilter>(LengthFilter(6))
Когда я набираю какое-то значение и получаю значение предложения, если я касаюсь текста, который длиннее максимально допустимой длины для редактируемого текста, я получаю следующее исключение:
> E/AndroidRuntime: FATAL EXCEPTION: main
> Process: com.slaviboy.myapp, PID: 30477
> java.lang.IndexOutOfBoundsException: setSpan (0 ... 23) ends beyond length 20
> at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1309)
> at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:680)
> at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:672)
> at android.widget.TextView.setSpan_internal(TextView.java:11450)
> at android.widget.Editor.replaceWithSuggestion(Editor.java:2764)
> at android.widget.Editor.-wrap21(Unknown Source:0)
> at android.widget.Editor$SuggestionsPopupWindow.onItemClick(Editor.java:3749)
> at android.widget.AdapterView.performItemClick(AdapterView.java:318)
> at android.widget.AbsListView.performItemClick(AbsListView.java:1158)
> at android.widget.AbsListView$PerformClick.run(AbsListView.java:3127)
> at android.widget.AbsListView$3.run(AbsListView.java:4042)
> at android.os.Handler.handleCallback(Handler.java:790)
> at android.os.Handler.dispatchMessage(Handler.java:99)
> at android.os.Looper.loop(Looper.java:164)
> at android.app.ActivityThread.main(ActivityThread.java:6494)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Я знаю, что могу предотвратить предложения с помощью xml
android:inputType="textNoSuggestions"
или с помощью Java/Kotlin
editText.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
Но является ли это лучшим решением проблемы?
Комментарии:
1. Попытался проверить это, но не смог воспроизвести.. когда текст из предложения выбран, текст редактирования автоматически обрезается, чтобы соответствовать только первым 6 буквам текста