2015-05-09 92 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)全部替換「正常」的空間。由於這些空間是不可破壞的,它們可以防止換行。

只要刪除這條線和話不會再打破一半。