StaticLayout getEllipsisCount возвращает 0, когда я знаю, что это эллипсис? - PullRequest
2 голосов
/ 23 февраля 2011

Итак, у меня есть расширенный TextView, из которого я пытаюсь создать StaticLayout, чтобы я мог определить, уходит ли текст за экран, вызывая getEllipsisCount.

Итак, из TextView я создаю staticlayout следующим образом:

layout = new StaticLayout(getText(), getPaint(), getWidth(), Alignment.ALIGN_NORMAL, 0f, 0f, false);

Но даже если layout.getLineCount () возвращает правильное количество строк, getEllipsisCount (n) никогда не возвращает> 0, даже когда я отчетливо вижу добавление многоточия.

Так что я предполагаю, что это стало не очень хорошим способом обнаружения, если текст исчез с экрана ... так что кто-нибудь знает оболее подходящий способ, или как заставить это работать?

1 Ответ

1 голос
/ 16 июля 2013

Я тоже сталкивался с этой проблемой на Android 4.2.2.Я смог обойти это, используя ViewTreeObserver API для установки обратного вызова для события onGlobalLayout и запуска отсроченного запуска оттуда:

ViewTreeObserver observer = _someView.getViewTreeObserver();    
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
                @Override    
                public void onGlobalLayout() {
                  _somView.getViewTreeObserver().removeGlobalOnLayoutListener(this);    
                  _textView.postDelayed(new Runnable() {  
                       public void run() {
                          // Code that uses ellipsis detection here
                       }
                    }, 10); 
                });

Это, по общему мнению, несколько хакерскийэто единственный способ, с помощью которого я мог правильно определить эллипсис, в противном случае он просто продолжал сообщать, что эллипсис не происходил.В моем тестировании задержка необходима для того, чтобы это работало, но все это выполняется достаточно быстро, так что элементы могут быть скрыты / показаны на основе этой информации без мерцания пользовательского интерфейса.

...