Button btnBold = (Button) findViewById(R.id.btnBold);
btnBold.setOnClickListener(new OnClickListener() {
@Override
public void onClick (View v){
startSelection = etx.getSelectionStart();
endSelection = etx.getSelectionEnd();
Spannable s = etx.getText();
s.setSpan(new StyleSpan(Typeface.BOLD), startSelection, endSelection, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
});
Button btnNormal = (Button) findViewById(R.id.btnNormal);
btnNormal.setOnClickListener(new OnClickListener() {
@Override
public void onClick (View v){
startSelection = etx.getSelectionStart();
endSelection = etx.getSelectionEnd();
Spannable s = etx.getText();
s.setSpan(new StyleSpan(Typeface.NORMAL), startSelection, endSelection, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
});
С помощью приведенного выше кода я пытаюсь выделять и выделять выделенный текст кнопкой.
Например:
Я выделил эту строку жирным шрифтом, выделив все сразу.
сейчас, если я применю unbold, выделив часть текста в строке выше, это не будет работать.
Я уже прошел через эти ответы, но не повезло:
Как отменить выделение выделенного текста в Edittext Android?
Удалить стиль на пролетах
Удаление стиля из выделенного текста в тексте редактирования
Проблема с вышеуказанными решениями заключается в том, что, например, если вы выбрали пять слов из текста и сделали их жирными, а теперь вы выбрали некоторую часть этого жирного текста и полужирный, то все пять слов будут выделены жирным шрифтом.
Решения, упомянутые в приведенных выше ссылках, используют следующий код для удаления span, который не решает проблему правильно
Spannable str = this.getText();
StyleSpan[] spans = str.getSpans(sStart, sEnd, StyleSpan.class);
for (int i = 0; i < spans.length; i++) {
if (spans[i].getStyle() == android.graphics.Typeface.BOLD){
str.removeSpan(spans[i]);
}
}
Я не могу найти Android API, где я могу удалить диапазон из выбранного диапазона. Спасибо за любую помощь, спасибо.