2010-08-04 38 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); 
相关问题