Почему в StyleSpan нельзя использовать гарнитуру для NORMAL поверх гарнитуры для BOLD? - PullRequest
1 голос
/ 20 марта 2019
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, где я могу удалить диапазон из выбранного диапазона. Спасибо за любую помощь, спасибо.

...