Android StaticLayout getEllipsisCount在我知道时返回0';什么是省略?
所以我有一个扩展的TextView,我正试图从中创建一个StaticLayout,这样我就可以通过调用getEllipsisCount来检测文本是否离开屏幕 因此,在TextView中,我构建了静态布局,如下所示:Android StaticLayout getEllipsisCount在我知道时返回0';什么是省略?,android,android-layout,screen,textview,Android,Android Layout,Screen,Textview,所以我有一个扩展的TextView,我正试图从中创建一个StaticLayout,这样我就可以通过调用getEllipsisCount来检测文本是否离开屏幕 因此,在TextView中,我构建了静态布局,如下所示: layout = new StaticLayout(getText(), getPaint(), getWidth(), Alignment.ALIGN_NORMAL, 0f, 0f, false); 但是,即使layout.getLineCount()返回正确的行数,getEll
layout = new StaticLayout(getText(), getPaint(), getWidth(), Alignment.ALIGN_NORMAL, 0f, 0f, false);
但是,即使layout.getLineCount()返回正确的行数,getEllipsisCount(n)也不会返回>0,即使我可以清楚地看到它添加了省略号
所以我猜这已经成为一个不好的方式来检测文本是否已经离开了屏幕。。。那么有谁知道更合适的方法,或者如何让它工作呢?我在Android 4.2.2上也遇到了这个问题。我可以通过使用API为onGlobalLayout事件设置回调并从那里启动延迟runnable来绕过它:
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闪烁 是否需要先绘制静态布局?有没有一种方法可以在不显示用户的情况下,仅为测试省略号而绘制文本?您可以在哪里确定textview是否已椭圆化?没有,我相信必须先绘制文本,然后才能返回有效值。但我最初问这个问题是为了为另一个问题创建一个解决方案,看看你需要什么:当包含换行符的文本出现时,这种情况发生在我身上。删除它们修复了省略号计算。+1谢谢-能够将其与
\u textView.post
一起使用,而不是.postDelayed
。