Инициирование Android TextView не будет работать в первый раз, размеры равны нулю.В чем секрет? - PullRequest
0 голосов
/ 26 октября 2010

Я накачал вид во всплывающее окно.Это представление включает в себя TextView, где я хочу разместить текст во время выполнения.Мне нужно посчитать количество строк, которые TextView использует, чтобы настроить размер всплывающего окна.Для этой цели я использую функцию TextLine getLineCount () и рисую TextView перед подсчетом количества строк (myTextView.draw (canvas)).

Однако, когда я в первый раз вызываю PopupWindow, getLineCount () возвращает числосимволов, а не количество строк (например, 42 вместо 2). Отладочные команды предполагают, что это связано с тем, что TextView не инициирован должным образом:

DEBUG / View (207): frame = {0, 0, 0,0} scroll = {0, 0} DEBUG / View (207): mMeasureWidth = 0 mMeasureHeight = 0 DEBUG / View (207): privateFlags = {} DEBUG / View (207): frame = {0, 0, 0, 0} scroll = {0, 0} mText = "текст для отображения .."

В остальное время срабатывает всплывающее окно (при нажатии пользователем на значки карты) представление имеет ненулевые параметры,и затем количество строк работает нормально:

ОТЛАДКА / Просмотр (207): frame = {7, 13, 209, 79} scroll = {0, 0} ОТЛАДКА / Просмотр (207): mMeasureWidth = 202 mMeasureHeight =66 DEBUG / View (207): privateFlags = {HAS_BOUNDS} DEBUG / View (207): frame = {7, 13, 209, 79} scroll = {0, 0} mText = "текст для отображения .."

В качестве обходного пути я пытался нарисовать невидимое окно PopupWindow до рисования первого всплывающего окна, то есть пытался использовать его «дважды в первый раз».Это не помогло ... Я также попытался сделать недействительным MapView, который тоже не работал.

Может кто-нибудь подсказать, как правильно инициировать представления, чтобы я мог использовать getLineCount () так, как предполагаетсяк?

Спасибо!Vanja

1 Ответ

0 голосов
/ 26 октября 2010

в качестве обходного пути, я бы предложил класс этого парня:

Как отрегулировать размер шрифта текста в соответствии с textview

Я думаю, что он отлично работает, используя measureText().

Но почему это не сработает - я не знаю, мне нужно немного в этом покопаться;) Мое предложение состоит в том, что сначала текстовое поле действительно узкое и позволяет только одинсимвол в одной строке (поэтому он возвращает 42 вместо 2).

...