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);
}
});
С помощью приведенного выше кода я пытаюсь выделить BOLD и UNBOLD выделенный текст с кнопки.
Например: Я выделил эту строку жирным шрифтом, выбрав все сразу.
теперь, если я применю нежирный шрифт, выбрав часть текста в строке выше, это не сработает.
Я уже прошел через эти ответы, но не повезло:
Как выделить выделенный текст в Edittext Android?
Удаление стиля из выделенного текста в тексте редактирования
Проблема с приведенными выше решениями заключается в том, что, например, если вы выбрали пять слов из текста и выделили их жирным шрифтом, а теперь вы выделили некоторую часть этого текста жирным шрифтом и выделили его жирным шрифтом, тогда все пять слов будут выделены жирным шрифтом.
Решения, упомянутые в приведенных выше ссылках, используют следующий код для удаления диапазона, который не решает проблему правильно.
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, где я могу удалить диапазон из выбранного диапазона. Любая помощь приветствуется, спасибо.