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 ответа:
Быстрым и грязным решением может быть следующая функция:
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" />