Как определить, сколько текста поместится в TextView в Android? - PullRequest
12 голосов
/ 04 августа 2010

У меня есть макет, который выглядит примерно так:

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

По сути, мне нужно содержимое TextView 2 для переноса на следующую строку, но начать там, где начинается TextView 1. Я думал, что если бы я знал, сколько текста поместится в TextView 2 до того, как ему не хватит места в первой строке, я мог бы взять остальную часть текста и поместить его в другой TextView ниже первых двух. Поэтому мне нужно измерить, сколько текста поместится в TextView (что может быть непросто, потому что, насколько я могу судить, Android будет пытаться разбить текст в TextView в хорошем месте, чтобы не разбить слово в середина, если этого можно избежать) или мне нужна новая идея о том, как это изложить.

Любая помощь будет принята с благодарностью.

Заранее спасибо,

groomsy

Ответы [ 3 ]

12 голосов
/ 11 сентября 2012

К сожалению, Paint.breakText не вернул точно такой же результат, как в моем двухстрочном TextView.

Однако это сработало

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

(используйте numberOfLines1 в качестве параметра к нему)

Ref http://developer.android.com/reference/android/text/Layout.html#getLineEnd(int) Установить отдельные строки TextView на разную ширину

6 голосов
/ 05 августа 2010

Вы можете создать объект Paint с размером текста 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, что позволит вам разделить его между представлениями.

2 голосов
/ 13 января 2015

Вам не нужны два 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);
...