Подтвердить что ты не робот

Как определить, сколько текста будет вписываться в TextView в Android?

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

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

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

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

Спасибо заранее,

groomsy

4b9b3361

Ответ 1

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

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

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

(используйте в качестве параметра параметр numberOfLines - 1)

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

Ответ 2

Вы можете создать объект Paint с текстовым размером TextView2 и использовать breakText(), чтобы измерить, сколько символов будет соответствовать ширине TextView2.

(Это непроверенный код - возможно, потребуется небольшая модификация)

String textToBeSplit = arbitraryText; // Text you want to split between TextViews
float textView2Width = somehowGetItsWidth; // TextView2 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, позволяя разбить его между вашими представлениями.

Ответ 3

Для этого вам не нужны два текстовых элемента, вы должны всегда использовать как можно меньше видов, и вы можете использовать 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);