TextView - 分裂线

时间:2016-01-14 12:58:14

标签: android android-layout textview android-xml

我在FrameLayout中有TextView。 Textview与FrameLayout的左下角对齐,并具有特定的MaxWidht。

目前看起来像这样:

  

Lorem ipsum dolor sit amet,vel et

     

alia fierent forensibus。

我想要实现的目标是:

  

Lorem ipsum dolor

     

坐下来,特别是fierent forensibus。

所以基本上,文本应该按底线的宽度分割,而不是顶行。

有没有简单的方法来实现这一目标?

Layout.xml

<FrameLayout
        android:id="@+id/flHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="orem ipsum dolor sit amet, vel et alia fierent forensibus."
            android:id="@+id/txtHeader"
            android:layout_gravity="left|bottom"
            android:textColor="#ffffff"
            android:layout_below="@id/txtDescriptionShort"
            android:maxWidth="400dp" />

</FrameLayout>

非常感谢任何帮助!

提前谢谢。

2 个答案:

答案 0 :(得分:1)

快速而肮脏的解决方案可能是以下功能:

private String format(String s, int maxLength) {
    String s2 = s.substring(s.indexOf(' ', s.length() - maxLength) + 1);
    return s.substring(0, s.length()  -  s2.length()) + "\n" + s2;
}

使用:

String s = "Lorem ipsum dolor sit amet, vel et alia fierent forensibus."
int tvMaxLength = 45;

txtHeader.setText(format(s, tvMaxLength));

它当然只适用于两行文本,并且容易出错。

一个更好的候选人,可以填充&#39;填充&#39;文字行&#39;自下而上&#39;可能看起来像那样。

private String formatMultiline(String s, int maxLength) {

    if (s == null  || s.length() == 0) {
        return "";
    }

    if (maxLength < 1) {
        return s;
    }

    StringBuilder sb = new StringBuilder(s);
    int position = sb.length() - 1;
    while (position >=  maxLength - 1) {
        position = s.indexOf(' ', position - maxLength + 1);
        sb.setCharAt(position, '\n');
    }
    return sb.toString();
}

请注意,我只进行了非常基本的测试。例如,函数假定字符串中没有双重空格。

答案 1 :(得分:0)

你可以这样做

<FrameLayout
    android:id="@+id/flHeader"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Lorem ipsum dolor\n\nsit amet, vel et alia fierent forensibus."
        android:id="@+id/txtHeader"
        android:layout_gravity="left|bottom"
        android:textColor="#ffffff"
        android:layout_below="@id/txtDescriptionShort"
        android:maxWidth="400dp" />