【问题标题】:How do I determine how much text will fit in a TextView in Android?如何确定 Android 中的 TextView 可以容纳多少文本?
【发布时间】:2011-03-25 11:14:50
【问题描述】:

我的布局看起来像这样:

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

基本上,我需要将 TextView 2 的内容换行到下一行,但从 TextView 1 开始的地方开始。我在想,如果我知道 TextView 2 在第一行的空间用完之前可以放入多少文本,我可以将其余的文本放入前两个下方的另一个 TextView 中。所以我需要测量有多少文本可以放入 TextView(这可能很棘手,因为据我所知,Android 会尝试在 TextView 中的一个好位置打破文本,这样它就不会在中间如果可以避免)或者我需要一个关于如何布局的新想法。

任何帮助将不胜感激。

提前致谢,

帅气

【问题讨论】:

  • 如果这是可能的,我有一种感觉,这将是值得的。为什么不能将 TextView2 的文本附加到 textview 1?
  • 不同的格式。另外,TextView 1 有时可以是 ImageView。我曾考虑将所有内容都放在 WebView 中,但我不知道如何在 2 行处停下来。

标签: android layout textview


【解决方案1】:

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

【讨论】:

  • 这让我在一个相关问题上走上了正确的道路。 getLineCountgetLineStart 的组合在自定义修剪/“椭圆化” TextView 时为我做了诀窍。
  • 另外,如果有人遇到getLayout() 返回 null 的问题,请查看此问题。 stackoverflow.com/questions/19157650/…
  • @Ioeschg getlayout() 返回null,但上面给出的链接没有帮助。你能告诉我出了什么问题吗?
  • 这个被接受的答案如何,在 getLayout() 中为空。
【解决方案2】:

您可以使用 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 的宽度,使您可以在视图之间拆分它。

【讨论】:

  • 感谢您提供的粗略示例。我会解决这个问题,让你知道结果如何。
  • 试过了,几乎成功了。问题是 TextView 使用了一种稍微不同的方法,尤其是当它有多行时。计数将是 2-3 个字符。找到了一个更好的解决方案,我将作为答案发布
  • @dparnas 嘿确实找到了“计数将是 2-3 个字符”的答案
【解决方案3】:

您不需要两个 TextView 来执行此操作,您应该始终使用尽可能少的视图,并且可以使用 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);

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多