在 TextView 中使用 SpannableStringBuilder 的段落间距

Posted

技术标签:

【中文标题】在 TextView 中使用 SpannableStringBuilder 的段落间距【英文标题】:Paragraph spacings using SpannableStringBuilder in TextView 【发布时间】:2014-11-04 17:33:46 【问题描述】:

正如问题所示,我正在处理TextView,它将使用SpannableStringBuilder 显示格式化文本。它有多个段落,我想知道使用一些内置跨度设置段落之间的间距的最简单(或至少最不复杂)的方法是什么。这可能吗?或者我是否需要为此构建一个自定义跨度类?

【问题讨论】:

【参考方案1】:

实现LineHeightSpan并覆盖chooseHeight方法如下

@Override
public void chooseHeight(CharSequence text, int start, int end,
        int spanstartv, int v, FontMetricsInt fm) 
    Spanned spanned = (Spanned) text;
    int st = spanned.getSpanStart(this);
    int en = spanned.getSpanEnd(this);
    if (start == st) 
        fm.ascent -= TOP_SPACING;
        fm.top -= TOP_SPACING;
    
    if (end == en) 
        fm.descent += BOTTOM_SPACING;
        fm.bottom += BOTTOM_SPACING;
    

不要忘记在每个段落文本的末尾添加\n

【讨论】:

如果你能为 Xamarin 提供ILineHeightSpan 的实现,我会爱上的。 注意:如果您在 EditText 中使用此跨度,这也会影响光标高度。 TOP_SPACING 和 BOTTOM_SPACING 密度是否独立?

以上是关于在 TextView 中使用 SpannableStringBuilder 的段落间距的主要内容,如果未能解决你的问题,请参考以下文章

带有SpannableString的Android Canvas drawText

在其他方法 Android 中使用 Textview.setText

如何在 TextView 中使用方向箭头

在 TextView 中使用 SpannableStringBuilder 的段落间距

当我第二次关注 Textview 时,文本在 textView 中向上移动

在textview中一起使用Swift常规和粗体字体