Android缩进和悬挂缩进

我有兴趣有一系列的TextViews,最终与一个悬挂缩进。 通过CSS做这个的标准方法是将边距设置为X像素,然后将文本缩进设置为-X像素。 显然,我可以用“android:layout_marginLeft =”Xdp“做第一个,但是我不知道如何在TextView上强加-X像素,任何想法或解决方法?

Solutions Collecting From Web of "Android缩进和悬挂缩进"

想出了如何使我的项目挂缩工作。 基本上你需要使用android.text.style.LeadingMarginSpan,并通过代码将它应用到你的文本。 LeadingMarginSpan.Standard采用完全缩进(1参数)或悬挂缩进(2参数)构造函数,并且需要为要应用样式的每个子string创build一个新的Span对象。 TextView本身也需要将其BufferType设置为SPANNABLE。

如果您必须多次执行此操作,或者希望将缩进合并到样式中,请尝试创build一个TextView的子类,该子类将接收一个自定义缩进属性并自动应用该缩放。 我已经从静态types博客的这个自定义视图和XML属性教程中得到了很多的使用,以及使用XML声明一个自定义的android UI元素的SO问题。

在TextView中:

 // android.text.style.CharacterStyle is a basic interface, you can try the // TextAppearanceSpan class to pull from an existing style/theme in XML CharacterStyle style_char = new TextAppearanceSpan (getContext(), styleId); float textSize = style_char.getTextSize(); // indentF roughly corresponds to ems in dp after accounting for // system/base font scaling, you'll need to tweak it float indentF = 1.0f; int indent = (int) indentF; if (textSize > 0) { indent = (int) indentF * textSize; } // android.text.style.ParagraphStyle is a basic interface, but // LeadingMarginSpan handles indents/margins // If you're API8+, there's also LeadingMarginSpan2, which lets you // specify how many lines to count as "first line hanging" ParagraphStyle style_para = new LeadingMarginSpan.Standard (indent); String unstyledSource = this.getText(); // SpannableString has mutable markup, with fixed text // SpannableStringBuilder has mutable markup and mutable text SpannableString styledSource = new SpannableString (unstyledSource); styledSource.setSpan (style_char, 0, styledSource.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); styledSource.setSpan (style_para, 0, styledSource.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); // *or* you can use Spanned.SPAN_PARAGRAPH for style_para, but check // the docs for usage this.setText (styledSource, BufferType.SPANNABLE);