如何确定Android中的TextView适合多少文本?

时间:2010-08-04 19:48:47

标签: android layout textview

我的布局看起来像这样:

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

基本上,我需要TextView 2的内容换行到下一行,但是从TextView 1启动的地方开始。我想如果我知道TextView 2在第一行的空间用完之前有多少文本,我可以把剩下的文本放在前两个下面的另一个TextView中。所以我需要测量文本适合TextView的数量(这可能很棘手,因为据我所知,Android会尝试在一个好的位置打破TextView中的文本,这样它就不会破坏一个单词中间是否可以避免)或者我需要一个关于如何解决这个问题的新想法。

非常感谢任何帮助。

提前致谢,

groomsy

3 个答案:

答案 0 :(得分:11)

不幸的是,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

答案 1 :(得分:6)

您可以使用TextView2的文本大小创建Paint对象,并使用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的宽度,这样您就可以在视图之间拆分。

答案 2 :(得分:2)

为了做到这一点,您不需要两个TextView,您应该始终使用尽可能少的视图,并且可以使用spannable以便为同一文本视图使用两种样式。
例如:

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);