2010-08-04 4 views
12

У меня есть макет, который выглядит примерно так:Как определить, сколько текста будет вписываться в TextView в Android?

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

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

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

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

groomsy

+0

Если это возможно, у меня есть чувство, что это будет намного сложнее, чем это будет стоить. Почему вы не можете просто добавить текст TextView2 в textview 1? – Falmarri

+1

Различное форматирование. Кроме того, TextView 1 иногда может быть ImageView. Я думал о том, чтобы поместить все в WebView, но я не знаю, как бы я остановился на двух строках. – groomsy

+0

http://stackoverflow.com/questions/7259016/scale-text-in-a-view-to-fit/7259136#7259136 – Ronnie

ответ

9

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

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

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

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

Ref http://developer.android.com/reference/android/text/Layout.html#getLineEnd(int) Set individual lines of TextView to different width

+0

Это привело меня к правильному пути с соответствующей проблемой. Комбинация 'getLineCount' и' getLineStart' сделала для меня трюк, когда пользовательская подравнивание/«эллипсирование» TextView. – loeschg

+0

Кроме того, для тех, у кого есть проблема с 'getLayout()' return null, проверьте этот вопрос. http://stackoverflow.com/questions/19157650/how-to-get-height-of-view-inside-adapter-for-creating-size-bitmap – loeschg

+0

@Ioeschg 'getlayout()' возвращает 'null', но выше данной ссылки не помогает. Можете ли вы сказать, что происходит не так? – Ammar

6

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

+0

Благодарим вас за пример. Я буду работать над этим и дать вам знать, как это получается. – groomsy

+0

не работает для меня. Всегда возвращаем ноль – shantanu

+1

Пробовал это, и он почти сработал. Проблема заключалась в том, что TextView использует несколько иной подход, особенно когда он имеет более одной строки. Счет будет 2-3 символа. Нашел лучшее решение, которое я выложу в качестве ответа. – dparnas

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^