Предотвращение нарушения слова в TextView

Как помешать слову в TextView сломаться пополам, когда он не подходит для текущей строки и вместо этого перейдет к следующей строке.

|android goo|
|gle kitkat |

должен быть

|android    |
|google     |
|kitkat     |

В настоящее время TextView добавляется к RelativeLayout с помощью этого кода:

TextView tv = new TextView(this);
RelativeLayout.LayoutParams layoutParams = new  RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (16*scale + 0.5f);
tv.setPadding(dpAsPixels, 0, dpAsPixels, 0);

tv.setLayoutParams(layoutParams);

String fullString = "<b>" + user + ":</b> " + text;
fullString = fullString.replaceAll("\n", "<br />");
fullString = fullString.replaceAll(" ", "&#160");
tv.setText(Html.fromHtml(fullString));
tv.setTextSize(32f);
tv.setTextColor(getResources().getColor(R.color.text));

layout.addView(tv);

Ответ 1

проблема заключается в следующей строке

fullString = fullString.replaceAll( "," & # 160");

удалите его, и он будет работать так, как вам нужно, вам не нужно заменять пространство html-кодом, fromHtml сделает это за вас

Ответ 2

Проблема с вашим кодом - это строка:

fullString = fullString.replaceAll(" ", "&#160");

Таким образом вы заменяете все "нормальные" пробелы на неразложимые пробелы (&nbsp). Поскольку эти пространства не разбиваются, они предотвращают разрыв строки.

Просто удалите эту строку, и слова больше не сломаются.

Ответ 3

Добавить

android:scrollHorizontally="false"

в вашу запись TextView в XML или вызовите

setHorizontallyScrolling(false);

Docs здесь.

Ответ 4

В некоторых случаях мы можем использовать Webview и оправдывать текстовую помощь html/css, а затем устанавливать текст.