2010-08-04 27 views
12

我有一個佈局,看起來是這樣的:如何確定在Android中的TextView中可以放入多少文本?

[TextView 1] [TextView 2] 
[ TextView 2 spill-over ] 

從本質上講,我需要的TextView 2的內容換到下一行,但是從哪裏開始的TextView 1開始。我在想,如果我知道TextView 2在第一行空間用完之前能夠放入多少文本,我可以將其餘的文本放在另一個TextView中,放在前兩個之下。因此,我需要測量TextView的大小(這可能會非常棘手,因爲據我所知,Android會嘗試在TextView中將文本分散在一個合適的位置,以便它不會打破文字中間如果可以避免的話),或者我需要一個關於如何解決這個問題的新想法。

任何幫助將不勝感激。

由於提前,

groomsy

+0

如果這是可能的,我有一種感覺,這將是一個複雜多了,這將是值得的。爲什麼不能只將TextView2的文本附加到textview 1? – Falmarri 2010-08-04 20:02:57

+1

不同的格式。另外,TextView 1有時可以是一個ImageView。我想過把所有內容都放入WebView中,但我不知道如何停止在2行。 – groomsy 2010-08-04 20:43:50

+0

http://stackoverflow.com/questions/7259016/scale-text-in-a-a-view-to-fit/7259136#7259136 – Ronnie 2014-03-19 12:16:58

回答

9

不幸的是,Paint.breakText沒有返回與我在兩行TextView中看到的完全相同的結果。

然而,這個工作

int numChars = textView.getLayout().getLineEnd(1); 

(使用numberOfLines - 1作爲參數傳遞給它)

參考 http://developer.android.com/reference/android/text/Layout.html#getLineEnd(int) Set individual lines of TextView to different width

+0

這讓我走上了正確的道路與相關的問題。 'getLineCount'和'getLineStart'的組合爲自定義修剪/「橢圓化」TextView提供了技巧。 – loeschg 2014-03-28 19:19:46

+0

另外,對於任何有'getLayout()'返回null的問題,請檢查這個問題。 http://stackoverflow.com/questions/19157650/how-to-get-height-of-view-inside-adapter-for-creating-sized-bitmap – loeschg 2014-03-28 19:20:59

+0

@Ioeschg'getlayout()'返回'null',但是以上給出的鏈接是沒有幫助的。你能告訴出了什麼問題嗎? – Ammar 2014-07-14 05:20:26

6

您可以創建TextView2的文字大小噴漆的對象,並使用breakText()來衡量多少個字符將適合你的TextView2的寬度。

(這是未經測試的代碼 - 可能需要稍作修改)

String textToBeSplit = arbitraryText; // Text you want to split between TextViews 
float textView2Width = somehowGetItsWidth; // TextView2's width 
float myTextSize = textView2.getTextSize(); 

Paint paint = new Paint(); 
paint.setTextSize(myTextSize); // Your text size 
int numChars = paint.breakText(textToBeSplit, true, float textView2Width, null); 

numChars告訴您如何在textToBeSplit許多字符將適合TextView2的寬度,使您給它你的看法之間的分裂。

+0

謝謝你的粗略例子。我會努力解決這個問題,並讓你知道結果如何。 – groomsy 2010-08-04 21:53:22

+0

不適合我。總是返回零 – shantanu 2012-09-04 14:02:09

+1

試過這個,它幾乎工作。問題在於TextView使用了一種稍微不同的方法,特別是當它有多行時。計數將是2-3個字符。找到一個更好的解決方案,我將作爲回答發佈 – dparnas 2012-09-11 18:51:25

2

你不需要爲了做兩個TextViews這個,你應該總是儘可能少地使用視圖,你可以使用spannable來爲同一個textview創建兩個樣式。
例如有:

TextView tv = (TextView) findViewById(R.id.textview); 
SpannableString text = new SpannableString(myString); 

text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle), 6, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

tv.setText(text, TextView.BufferType.SPANNABLE); 
相關問題