防止文字在 TextView 中被打断

Prevent word from being broken in 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);

添加

android:scrollHorizontally="false"

到您 XML 中的 TextView 条目或致电

setHorizontallyScrolling(false);

文档here.

问题出在下一行

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

删除它,它将根据您的需要工作,您不需要将 space 替换为 html 代码,fromHtml 会为您完成

我们可以在某些情况下使用Webview,并调整html/css的文本帮助,然后设置文本。

你的代码有问题是这一行:

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

通过这样做,您将所有 "normal" 空格替换为不可断开的空格 (&nbsp)。由于这些空格 不可断行,它们可以防止换行。

只需删除这一行,单词就不会再分成两半了。