TextView-Разделение Строк


У меня есть TextView в FrameLayout. Textview выровнен по левой нижней части Фреймлайаута и имеет определенный MaxWidht.

В настоящее время это выглядит следующим образом:

Lorem ipsum dolor sit amet, vel et

Alia fierent forensibus.

Чего я хочу добиться, так это:

Лорем Ипсум долор

Sit amet, vel et alia fierent forensibus.

Таким образом, в основном, текст должен быть разделен на ширина нижней линии, а не верхней линии.

Есть ли простой способ достичь этого?

Планировка.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 3

2 ответа:

Быстрым и грязным решением может быть следующая функция:

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

Он работает, конечно, только для двух строк текста и подвержен ошибкам.

Лучший кандидат для функции, которая "заполняет" строки текста "снизу вверх", может выглядеть примерно так.
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();
}
Пожалуйста, обратите внимание, что я сделал только очень базовое тестирование. Например, функция предполагает, что в строке нет двойных пробелов.

Вы можете сделать так

<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" />