【问题标题】:margin set to first line of textView边距设置为 textView 的第一行
【发布时间】:2011-12-02 19:12:35
【问题描述】:

我只想为 TextView 的第一行设置起始边距(不是每个段落的第一行)?我使用了以下代码:

SpannableString s = new SpannableString("this is a test"+"\n"+"this is a test");
s.setSpan(new android.text.style.LeadingMarginSpan.Standard(30, 0), 0, s.length(), 0);
textView .setText(s);

此处为段落的所有行设置了起始边距。我不希望这样。我希望仅将起始边距应用于第一行..请帮助..

【问题讨论】:

  • 我认为,你必须只使用空格..
  • 那么您可以采用两个单独的文本视图:第 1 段为 1,其余为其他。只需为第一个 textview 设置 span 并让其他内容保持原样。我想,你别无他法。

标签: android string textview


【解决方案1】:

正如这里所建议的,我也认为最好的解决方案是在开头简单地添加几个空格。如果您只需要 TextView 的第一行的边距空间,我看不出您需要做一些非常高级的事情的任何理由。

如果您以后需要更改或使用TextView中的文本,您可以使用substring()方法只获取字符串的一部分,即s.substring(2, s.length());

这不是一个完美的解决方案,但我认为它会做到。

【讨论】:

  • 问题是 diff 字符需要 UI 的 diff 长度才能显示,(例如:'m' 需要比 'i' 更长的长度),并且空格长度不等于所有字符长度。跨度>
【解决方案2】:

您实际上已经回答了自己的问题。
您需要做的就是将跨度长度设置为 1 而不是 s.length()。

if (s.lenght() > 0) {
    s.setSpan(new android.text.style.LeadingMarginSpan.Standard(30, 0), 0, 1, 0);
}

这样边距将只应用于第一段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多