Делаем текст жирным, курсивом и подчеркиванием с помощью динамической строки - PullRequest
0 голосов
/ 25 августа 2018

В настоящее время я пытаюсь выяснить, как сделать текст полужирным , Курсив или подчеркнуть динамическую строку из API, текст, который должен быть выделен жирным шрифтом, выглядит как * полужирный *, курсив обозначается _ italic_ и подчеркивается как # underline # (та же функциональность, что и Stackoverflow). После успешного преобразования текста я также хочу удалить специальные символы.

Текст из API - * Я смелый * и люблю видеть себя и других тоже.

Ожидаемый ответ - Я жирный и люблю видеть себя и других тоже.

Я пробовал код, который не работает, если я пытаюсь создать курсив после полужирного, а также, если я пытаюсь удалить специальные символы.

TextView t = findViewById(R.id.viewOne);
String text = "*I am Bold* and _I am Italic_ here *Bold too*";
SpannableStringBuilder b = new SpannableStringBuilder(text);
Matcher matcher = Pattern.compile(Pattern.quote("*") + "(.*?)" + Pattern.quote("*")).matcher(text);

while (matcher.find()){
  String name = matcher.group(1);
  int index = text.indexOf(name)-1;
  b.setSpan(new StyleSpan(Typeface.BOLD), index, index + name.length()+1, SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
}
t.setText(b);  

Я не хочу использовать теги HTML

1 Ответ

0 голосов
/ 25 августа 2018

Отредактированный ответ для ответа на отредактированный вопрос

Попробуйте ниже, вы должны были передать typeface вместо StyleSpan.

public class SpanTest extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        TextView test = findViewById(R.id.test);
       // String text = "*I am Bold* and _I am Italic_ here *Bold too*";
        String text = "* I am Bold* and love to see _myself and _ others too";
        CharSequence charSequence = updateSpan(text, "*", Typeface.BOLD);
        charSequence = updateSpan(charSequence, "_", Typeface.ITALIC);
        test.setText(charSequence);
    }

    private CharSequence updateSpan(CharSequence text, String delim, int typePace) {
        Pattern pattern = Pattern.compile(Pattern.quote(delim) + "(.*?)" + Pattern.quote(delim));
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        if (pattern != null) {
            Matcher matcher = pattern.matcher(text);
            int matchesSoFar = 0;
            while (matcher.find()) {
                int start = matcher.start() - (matchesSoFar * 2);
                int end = matcher.end() - (matchesSoFar * 2);
                StyleSpan span = new StyleSpan(typePace);
                builder.setSpan(span, start + 1, end - 1, 0);
                builder.delete(start, start + 1);
                builder.delete(end - 2, end - 1);
                matchesSoFar++;
            }
        }
        return builder;
    }
}

Вотвыход.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...