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);
});
Это, по общему признанию, несколько хакерское, но это единственный способ, которым я мог правильно определить эллипсис, в противном случае он просто продолжал сообщать, что никакого эллипсиса не происходило. В моем тестировании задержка необходима для того, чтобы это работало, но все это выполняется достаточно быстро, так что элементы могут быть скрыты / показаны на основе этой информации без мерцания пользовательского интерфейса.