Android Textview изменяя межстрочный интервал / отступы - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь создать текстовое представление внутри нижнего диалога, с примером макета, как показано ниже.Я поместил желаемые примечания по форматированию в скобки. Большинство составных текстов (полужирный, подчеркнутый и т. Д.) Легко создать.

С помощью "\ n \ n" легко переносить 2 строки, но как мне создать1,5 межстрочного интервала между определенными линиями?Я добавляю текст динамически, используя append (...), поэтому я не могу использовать атрибут android: text в макете XML.В большинстве примеров, которые я видел, межстрочный интервал также встроен в xml, который применяется ко всему тексту.Я обнаружил, что вы можете применять разные межстрочные интервалы для абзацев, но «\ n» нарушит абзац, и разный межстрочный интервал не будет работать.

title (underlined, bold, very large)
(linespace 1.5)
blurb
(linespace 2)
sub-section1 (underlined, bold, large)
(linespace 1.5)
ClickableSubheading1 
(linespace 1.5)
clickableSubheading2
(linespace 1.5)
[could be many more subheadings here...]

(linespace 2)
sub-section2 (underlined, bold, large)
(linespace 1.5)
ClickableSubheading1a 
(linespace 1.5)
clickableSubheading2a
(linespace 1.5)
[could be many more subheadings here...]


etc - more subsections to be added as and when needed

NB: применимы кликабельные подзаголовкикод, неявный для приложения, и не является гиперссылками (я думал о том, чтобы сделать все это в виде html, а затем прочитать это в моем текстовом представлении) В основном мне нужен диапазон или аналогичный код, который говорит: «поставьте перенос строки, m раз» \n 'здесь', где 'm' может быть любым значением

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Вы можете использовать RelativeSizeSpan для масштабирования размера второй '\n' до меньшего значения.

Как

// I try to find all '\n\n' in TextView then I resize the second \n size to 0.5
private fun beautifulParagraph(textView: TextView) {
    val text = textView.text
    var startIndex = 0
    val sb = SpannableString(text)
    var index: Int
    while (text.indexOf("\n\n", startIndex).also { index = it } != -1) {
        sb.setSpan(RelativeSizeSpan(0.5f), index + 1, index + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        startIndex = index + 2
    }
    textView.text = sb
}

Использование

beautifulParagraph(yourTextView)

XML

<TextView
        android:id="@+id/tv_heelo"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\nbbbbbbbbbbbbbbbnbbbbbbbbbbbbbbbnbbbbbbbbbbbbbbbnbbbbbbbbbbbbbbb\n\nccccccccccccccccnccccccccccccccccnccccccccccccccccnccccccccccccccccncccccccccccccccc\n\nddd"
        android:textSize="15sp"
        android:layout_margin="20dp"
        android:background="#000"
        android:textColor="#fff"
/>

Результат (без изменения размера и с изменением размера)

image ------> image

0 голосов
/ 05 июля 2019
  1. Вы можете использовать lineSpacingExtra и lineSpacingMultiplier в своем XML-файле.
  2. Вы можете использовать Span для настройки того, что вы хотите в textview https://developer.android.com/guide/topics/text/spans

  3. Иливы можете настроить то, что вы хотите в HTML и отображать HTML в TextView

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        textView.setText(Html.fromHtml(htmlString, Html.FROM_HTML_MODE_COMPACT));
    } else { 
        textView.setText(Html.fromHtml(htmlString));
    }
    

Вот что я могу предложить для вас.

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