Определение того, переносит ли TextView строку

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

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 в строку номера строки и компенсировать разрывы строк?


person Paradoxian    schedule 27.06.2016    source источник


Ответы (1)


Сначала вы можете вычислить ширину экрана, необходимую для рендеринга строки. Сравните это с вашим общим устройством/представлением, чтобы проверить, нужно ли вам вставлять '\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();
    }
person Nilanchal    schedule 27.06.2016
comment
всякий раз, когда я пытаюсь использовать метод textView getWidth(), он возвращает 1300, в то время как ваша функция возвращает значения в диапазоне 200-300 для текста. Тем не менее, линия все еще закручивается. Вы знаете, почему это так? - person Paradoxian; 27.06.2016