如何增加textview

时间:2015-10-13 14:21:30

标签: android textview

我有一些文本有多个段落(使用“\ n”),并希望在段落之间加一个间距,但不使用“\ n \ n”。但同一段中的文字我想让它们保持较低的空间。

我尝试使用lineSpacingExtralineSpacingMultiplier,但它为每一行设置了空格(也包含段落)。

我想要这样的事情:

Multiparagraph padding

6 个答案:

答案 0 :(得分:20)

您可以使用Spannable来实现此目的:

$.ajax()

上面的代码用两个换行符替换所有换行符。之后,它为每个第二个换行符设置绝对大小。

答案 1 :(得分:3)

您可以使用

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>"));

答案 2 :(得分:2)

我也遇到过类似的问题。最后,我用换行符固定了跨度文本。代码就在这里。

    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);

答案 3 :(得分:0)

恐怕它不能在TextView中调整。这是所有TextView属性的文档:https://developer.android.com/reference/android/R.styleable#TextView 我想做到这一点的最佳方法可能是为每个段落使用一个TextView,然后在TextView之间定义边距。

我认为这与html中的p标签类似。标签内是整个段落,然后定义p标签的布局。

答案 4 :(得分:0)

无需操纵段落之间的间距。

  

FROM_HTML_MODE_LEGACY:块级元素之间用空白行(两个换行符)分隔。这是N之前的遗留行为。

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

答案 5 :(得分:0)

answer above 对我不起作用,但基本思想是正确的,添加一个空行并更改其高度会得到所需的结果。但是,在我的情况下更改行高的工作方式如下:

private fun insertParagraphSpacing(text: CharSequence, spacing: Int): CharSequence {
    val stringBuilder = SpannableStringBuilder(text)

    Regex(lineSeparator()).findAll(text).forEachIndexed { index, match ->
      val span = ParagraphSpacingSpan(lineHeight, spacing)

      val separator = SpannableString(lineSeparator())
      separator.setSpan(span, 0, separator.length, SPAN_EXCLUSIVE_EXCLUSIVE)

      stringBuilder.insert(match.range.last + 1 + index * separator.length, separator)
    }

    return stringBuilder
  }

ParagraphSpacingSpan的实现如下:

class ParagraphSpacingSpan(
  @Px @IntRange(from = 1) val lineHeight: Int,
  @Px @IntRange(from = 0) val spacing: Int
) : LineHeightSpan {

  override fun chooseHeight(t: CharSequence, s: Int, e: Int, v: Int, l: Int, fm: FontMetricsInt) {
    val textHeight: Int = fm.descent - fm.ascent

    fm.descent = textHeight - lineHeight + spacing
    fm.ascent = 0
  }
}

lineHeight 是显示该行的 TextView 字段的值。