StaticLayout getEllipsisCount возвращает 0, когда я знаю его эллипсинг?

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

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

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

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

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

Ответы

Ответ 1

Я также столкнулся с этой проблемой на 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); 
                });

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