Как увеличить интервал между абзацами в текстовом виде

У меня есть текст, который содержит более одного абзаца (с помощью "\n" ) и вы хотите установить интервал между абзацами, но без использования "\n\n". Но текст из того же абзаца я хочу сохранить их с более низким пространством.

Я попытался использовать lineSpacingExtra и lineSpacingMultiplier, но он устанавливает пробелы для каждой строки (в том числе и абзаца).

Мне нужно что-то вроде этого:

Многократное заполнение

Ответ 1

Вы можете использовать Spannable для этого:

String formattedText = text.replaceAll("\n", "\n\n");
SpannableString spannableString = new SpannableString(formattedText);

Matcher matcher = Pattern.compile("\n\n").matcher(formattedText);
while (matcher.find()) {
    spannableString.setSpan(new AbsoluteSizeSpan(25, true), matcher.start() + 1, matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

Приведенный выше код заменяет все разрывы строк двумя разрывами строк. После этого он устанавливает абсолютный размер для каждого разрыва второй строки.

Ответ 2

Вы можете использовать

Html.fromHtml(String);

Это поможет вам написать строку в виде html, где вы можете использовать теги html, такие как <p>, <h1> и т.д.

Например:

myTextView.setText(Html.fromHtml("<p>This is it first<br>paragraph.</p><p>This is the second<br>paragraph.</p>"));

Ответ 3

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

    String text ="Lorem ipsum dolor sit amet, End of first line.\nBegining of the second line, Aenean justo mi, faucibus eu suscipit id, finibus gravida quam. End of Second Line.\nBegining of the third line, Aliquam ac diam tempus, pharetra nibh at, imperdiet diam.  End of Third Line.\n Begining of the fourth line, Fusce placerat erat dolor, id tristique lacus gravida ac. End of Fourth Line.\nBegining of the Fifth line, Sed id molestie est, sed elementum lectus.  End of Fifth Line.\n";

    text = text.replace("\n","\n\0");
    Spannable spannable = new SpannableString(text);
    for (int i = 0; i < text.length()-1; i++) {
        if (text.charAt(i) == '\n') {
            spannable.setSpan(new RelativeSizeSpan(1.5f), i+1, i+2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
    mTextMessage.setText(spannable, TextView.BufferType.SPANNABLE);

Ответ 4

Боюсь, это не настраивается в TextView. Вот документ со всеми атрибутами TextView: https://developer.android.com/reference/android/R.styleable#TextView Я думаю, что лучший способ сделать это - использовать один TextView для каждого абзаца, а затем определить поле между TextView.

Я думаю, что это аналогичная концепция дизайна, как тег p в HTML. Внутри тега находится целый абзац, затем определите расположение тега p.

Ответ 5

Нет необходимости манипулировать интервалом между абзацами.

FROM_HTML_MODE_LEGACY: Разделять элементы уровня блока пустыми строками (два символа новой строки) между ними. Это наследие до Н.

textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
    } else {
        Html.fromHtml(html)
    }