Программно получить ширину TextView - PullRequest
1 голос
/ 05 февраля 2011

Я пытаюсь построить макет программно.

Этот макет является динамическим. На основании данных, прочитанных из базы данных, каждый раз они могут выглядеть по-разному.

У меня есть LinearLayout с вертикальной ориентацией.

Я хочу разместить как можно больше текстовых представлений с текстом (данными из базы данных) в «строке».

То, что я делаю, строит LinearLayouts, которые являются строками. Эти LinearLayouts заполнены TextViews. Я строю TextView, устанавливаю текст, а затем проверяю ширину, чтобы увидеть, поместится ли он в эту строку (вычитая сумму всех значений ширины TextView из ширины экрана и посмотрим, подойдет ли новый TextView). Если нет, я создаю новый LinearLayout и начинаю добавлять TextViews к этому.

Проблема заключается в том, что myTextView.getWidth () и myTextView.getMeasuredWidth () возвращают 0.

Почему? Как я могу получить ширину TextView?

Ответы [ 2 ]

0 голосов
/ 20 марта 2018

Вы можете использовать эту библиотеку, чтобы запланировать задачу вычисления ширины на правильное время после того, как представление было полностью прорисовано

Вы можете позвонить на onCreate() и с любого Thread

https://github.com/Mohamed-Fadel/MainThreadScheduler

Пример использования:

MainThreadScheduler.scheduleWhenIdle(new Runnable() {
       @Override
       public void run() {
           int width = textview.getWidth();
           int height = textview.getHeight();
           textview.setText( String.valueOf( width +","+ height ));
       }
   });
0 голосов
/ 05 февраля 2011

Ну, во-первых, пожалуйста, оставьте свой код. Во-вторых, getWidth/getHeight возвращается вопрос с нулем A LOT , чтобы вы могли искать SO для получения дополнительных ответов.

Предполагая, что вы вызываете эти методы во время onCreate (что, вероятно, имеет место), пользовательский интерфейс еще не отрисован, поэтому возвращаемое значение равно нулю. Вы не можете получить ширину или высоту вида, пока он не будет нарисован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...