2016-01-14 4 views
2

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

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

Lorem Ipsum боль сидеть Амет, Vel ЕТ

частности fierent forensibus.

То, что я хочу, чтобы достичь это:

Lorem Ipsum Dolor

сидеть Амет, Vel и др частности 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> 

Любая помощь очень ценится!

Заранее спасибо.

+0

'setText (« Lorem ipsum dolor \ n sit amet, vel et alia fierent forensibus. »);' –

+0

Это сложный вопрос! Я думаю, вам придется переопределить метод TextView's text renderring. – Lamorak

ответ

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

Это произведения курс только для двух строки текста и подвержены ошибкам.

Лучший кандидат на функцию, которая «заполняет» линии текста «снизу вверх», может выглядеть примерно так.

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

Обратите внимание, что я провел только очень базовое тестирование. Например, функция предполагает, что в строке нет двойных пробелов.

+0

Поскольку текст в моем TextView динамичен, и мне нужно динамически установить новую строку, это то, что я искал. Я просто надеялся, что с ним можно будет проще обрабатывать XML. Спасибо! – Al0x

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

Смежные вопросы