Я получаю ошибку в стилизации и формировании моего edittext
Привет, я пытаюсь смелые и снять выделение, сделать текст курсивом и unitalic но я получаю ошибку, когда я изменить выбор мой текст, особенно когда мой текст полужирным шрифтом и курсивом. Я использую тот же код для курсивного стиля, что и для полужирного, приведенного ниже. Может быть, что-то не так с получением позиции spanStart и spanEnd, но я не могу понять этого. Вот мой код
private void boldText2(){ int typeface = Typeface.NORMAL; Spannable str = texto.getText(); int selStart = texto.getSelectionStart(); int selEnd = texto.getSelectionEnd(); StyleSpan[] styleSpans = texto.getText().getSpans(selStart, selEnd, StyleSpan.class); for (StyleSpan styleSpan : styleSpans) { int oldStyle = styleSpan.getStyle(); typeface = oldStyle; int spanStart = str.getSpanStart(styleSpan); int spanEnd = str.getSpanEnd(styleSpan); if (oldStyle == Typeface.BOLD_ITALIC) { str.setSpan(new StyleSpan(Typeface.ITALIC), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } if(oldStyle == Typeface.BOLD) { str.removeSpan(styleSpan); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } if (spanStart < texto.getSelectionStart()) { str.setSpan(new StyleSpan(oldStyle), spanStart, selStart, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "spanStart < texto.getSelectionStart"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } if (spanEnd > texto.getSelectionEnd()) { str.setSpan(new StyleSpan(oldStyle), selEnd, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "spanEnd > texto.getSelectionEnd()"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } } if (typeface != Typeface.BOLD) { Log.d("TAG", "Bolding section entered"); if (styleSpans.length > 0) { int lastSpanEnd = 0; for (StyleSpan styleSpan : styleSpans) { int oldStyle = styleSpan.getStyle(); int spanStart = str.getSpanStart(styleSpan); int spanEnd = str.getSpanEnd(styleSpan); if (spanStart > lastSpanEnd) { str.setSpan(new StyleSpan(Typeface.BOLD), lastSpanEnd, spanStart, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "spanStart > lastSpanEnd and is bolded 1st if condition"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } lastSpanEnd = spanEnd; str.removeSpan(styleSpan); if (spanStart < texto.getSelectionStart()) { str.setSpan(new StyleSpan(oldStyle), spanStart, selStart, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "spanStart < texto.getSelectionStart()"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } if (spanEnd > texto.getSelectionEnd()) { str.setSpan(new StyleSpan(oldStyle), selEnd, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "spanEnd > texto.getSelectionEnd()"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + " spanStart: " + spanStart + " spanEnd: " + spanEnd); } if (oldStyle == Typeface.ITALIC) { str.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), spanStart, spanEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "Bold and Italic"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd + "spanStart: " + spanStart + " spanEnd: " + spanEnd); } } if (selEnd != lastSpanEnd) { str.setSpan(new StyleSpan(Typeface.BOLD), selStart, selEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "selEnd != lastSpanEnd"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd); } } else { str.setSpan(new StyleSpan(Typeface.BOLD), selStart, selEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d("TAG", "Last else Bold"); Log.d("TAG", "selStart: " + selStart + " selEnd: " + selEnd); } } }
вот ошибка, которую я получаю
java.lang.IndexOutOfBoundsException: setSpan (-1 ... 14) starts before 0
Что я уже пробовал:
Отдельно полужирный и курсивный цвета работают нормально, но когда мой текст становится полужирным и курсивным, и я перемещаю курсор выделения, то он undbold и unitalic не работают и дают мне эту ошибку.