Android textview не поддерживает разрыв строки - программирование
Подтвердить что ты не робот

Android textview не поддерживает разрыв строки

Я создаю настраиваемый вид программно, который отображает текст, который анализируется из XML файла. Текст длинный и содержит символ "/n" для разрывов силовой линии. По какой-то причине текстовое представление отображает /n, и никаких разрывов строк нет. Вот мой код:

                    // get the first section body
                    Object body1 = tempDict.get("FIRE");
                    String fireText = body1.toString();

                    // create the section body
                    TextView fireBody = new TextView(getActivity());
                    fireBody.setTextColor(getResources().getColor(R.color.black));
                    fireBody.setText(fireText);
                    fireBody.setTextSize(14);
                    fireBody.setSingleLine(false);
                    fireBody.setMaxLines(20);
                    fireBody.setBackgroundColor(getResources().getColor(R.color.white));

                    // set the margins and add to view
                    layoutParams.setMargins(10, 0, 10, 0);
                    childView.addView(fireBody,layoutParams);

Текст из файла XML выглядит следующим образом:

Now is the time /n for all good men to /n come to the aid of their /n party

Он должен отображаться как таковой;

Now is the time
for all good men to
come to the aid of their
party

Есть ли настройки, которые мне не хватает?

UPDATE

\ r\n работает, если я жестко кодирую его в свое представление. то есть:

String fireText = "Now is the time \r\n for all good men \r\n to come to the aid";

На самом деле \n также работает, если я его жестко кодирую:

String fireText = "Line one\nLine two\nLine three";

FYI

System.getProperty("line.separator");

это возвращает строку "/n", поэтому нет необходимости преобразовывать в "/r/n".

К сожалению, мои данные происходят в XML файле, который анализируется и сохраняется в хэш-карте. Я попробовал следующее:

String fireText = body1.toString().replaceAll("\n", "\r\n");

\n не заменяется на \r\n. Может быть, потому, что я перехожу из объекта в String?

4b9b3361

Ответ 1

У меня была такая же проблема при тех же обстоятельствах. Решение довольно прямолинейно.

Когда вы думаете об этом, так как виджет textview отображает текст с буквальными значениями "\n" , тогда строка, которую он задает, должна хранить каждый "\n" , как "\\n". Таким образом, когда ваша строка XML считывается и сохраняется, все вхождения "\n" экранируются, чтобы сохранить этот текст в виде буквального текста.

В любом случае, все, что вам нужно сделать, это:

fireBody.setText(fireText.replace("\\n", "\n"));

Работает для меня!

Ответ 2

Для разрыва строки вы используете в текстовом виде в текстовом виде так.

Настало время \r\n для всех хороших людей \r\n прийти на помощь своей вечеринке \r\n

Ответ 3

Пробовал все вышеперечисленное, сделал некоторые исследования моего собственного, в результате получилось следующее решение для визуализации строк вывода строки:

string = string.replace( "\\n", System.getProperty( "line.separator" ));

1), используя метод замены, который необходимо фильтровать экранированные строки (например, '\\n')

2) только тогда каждый экземпляр строки "\n" escape-символов передается в фактический перевод строки

В этом примере я использовал базу данных noSQL для сценариев Google Apps (ScriptDb) с форматированными данными JSON.

Приветствия: D

Ответ 4

У меня также была эта проблема, и я нашел ПОСТОЯННОЕ РЕШЕНИЕ, если вы устанавливаете текст из XML-ресурсов (я знаю, что это не то же самое, что OP, но его стоит знать)

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

<string name="test_string">"1. First
2. Second Line
3. Third Line"</string>

Ответ 5

попробуйте это

fireBody.setText(Html.fromHtml("testing<br>line<\br>") 

вашему серверу необходимо отправить FirstLine<br>lineAfterLineBreak<\br>

Ответ 6

Чтобы заставить строку прорваться через XML вашего текстового представления, вам нужно использовать \r\n вместо \n.

Итак, теперь ваш код в XML становится

android:text="Now is the time \r\n for all good men to \r\n come to the aid of their \r\n party"

Или если вы хотите сделать это программно, то в вашем Java-коде:

fireBody.setText("Now is the time \r\n for all good men to \r\n come to the aid of their \r\n party");

Вы также можете объявить текст как значение ресурса строки, например:

<string name="sample_string">"some test line 1 \n some test line 2"</string>

Еще один простой способ сделать это - изменить атрибут по умолчанию TextView в вашем XML файле.

<TextView
    android:id="@+id/tvContent"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:singleLine="false"

/>

И затем используйте textView.setText("First line \nSecond line \nThird line");