2016-06-27 2 views
0

Мы используем ExpandableList TableViews для отображения блока текста с номерами строк с одной стороны. Во-первых, строка для данного абзаца устанавливается в текстовое представление в правом столбце TableView. Затем строка строки с номером создается из строки абзаца и номера стартовой строки. Например, из строки (с начальной номер строки 1):Обнаруживает, обрабатывает ли TextView строку

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 
Donec ultricies a nunc sit amet venenatis. 
Aenean placerat dictum nunc, 
nec pulvinar arcu consequat a. 
Proin dignissim velit ut augue dictum ultricies. 
Fusce lorem dolor, elementum id tempor at, 
pellentesque eu dolor. Vestibulum rhoncus 
arcu in sapien sagittis gravida. 
Nullam vel nisl enim. 
Maecenas scelerisque at quam non congue. 
Nullam quis porttitor purus, nec interdum tellus. 

генерируется следующая строка номер строки:

\n\n\n\n5.\n\n\n\n\n10.\n\n 

Эта строка затем помещается в крайнем левом столбце TableView чтобы показать номер строки строки каждые пять строк.

Однако проблема возникает, когда размер текста повышается до точки, где строки текста обернуты (потому что линия слишком велика, чтобы поместиться на экране). Когда это произойдет, кажется, что необходимо вставить другую строку \ n в строку номера строки на сайте обертки текста, чтобы подсчитать потенциально несколько строк обернутого текста как одну строку. Есть ли, поэтому, в любом случае, для android, чтобы определить, была ли строка обернута в TextView, чтобы программа могла знать, чтобы вставить \ n в строку номера строки и компенсировать разрывы строк?

ответ

0

Сначала вы можете вычислить ширину экрана, необходимую для визуализации строки. Сравните это с вашим полным устройством/представлением, чтобы проверить, нужно ли вам вставлять '\ n' для переноса текста.

PS: Код не проверен, но должен работать. Если вы используете пользовательский шрифт, вы можете заменить Typeface.DEFAULT своим.

public float computeTotalWidthOnScreen(String text) { 
     final Typeface typeface = Typeface.DEFAULT; 
     final Paint paint = new Paint(); 
     final Rect bounds = new Rect(); 
     paint.setTypeface(typeface); 
     paint.setAntiAlias(true); 
     paint.setTextSize(defaultFontSize); 
     paint.getTextBounds(text, 0, text.length(), bounds); 

     return bounds.width(); 
    } 
+0

Когда я пытаюсь использовать метод getWidth() textView, он возвращает 1300, а ваша функция возвращает значения в диапазоне 200-300 для текста. Но линия все еще обертывается. Вы знаете, почему это так? – Paradoxian

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