Исключение Android при выборе текста из предложений для редактирования текста

#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 буквам текста