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. Мне удалось обойти это, используя API ViewTreeObserver, чтобы установить обратный вызов для события 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); 
                });

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

Другие вопросы по тегам