2015-05-09 94 views
10

如何防止TextView中的单词在不适合当前行时折断一半,而是移动到下一行。防止Word在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); 
+0

你给出的例子实际上会移到下一行。它只有在大字的情况下,比如15个字符奇怪的(或其他语言),我面临着你面临的问题。 或者你在给出的例子中也遇到过这个问题? – Droidekas

+0

查看:https://github.com/grantland/android-autofittextview –

+0

你试过'android:minLines'吗? – Droidekas

回答

4

问题是在下面的行

fullString = fullString.replaceAll(””, “&#160”);

删除它,它会工作,因为你需要,不需要用HTML代码来代替空间,fromHtml会为你做它

+0

你如何在文本之间放置空格。例如,使用Html.fromHtml()在TextView中放置“A ******* B”。 (请将星号当作空格)当我尝试时,TextView显示“A B”(单个空格)。 – User12111111

+0

尝试'textView.setText(Html.fromHtml( “A               B”));' – Vilen

+0

没有运气。同样的结果。 – User12111111

0

添加

android:scrollHorizontally="false" 

您TextView的条目你r XML或致电

setHorizontallyScrolling(false); 

Docs here

+0

不工作,没有变化。 –

0

我们可以在某些情况下,使用网页视图和对齐文本帮助的HTML/CSS然后设置文本。

2

与您的代码的问题是这一行:

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

通过这样做,你不易碎空间(&nbsp)全部替换“正常”的空间。由于这些空间是不可破坏的,它们可以防止换行。

只要删除这条线和话不会再打破一半。