StaticLayout getEllipsisCount返回0,当我知道它是椭圆化?

问题描述:

所以我有一个扩展的TextView,我试图创建一个StaticLayout,以便我可以通过调用getEllipsisCount来检测文本是否在屏幕外。StaticLayout getEllipsisCount返回0,当我知道它是椭圆化?

所以从TextView的范围内,我建造像这样的staticlayout:

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

但是,即使layout.getLineCount()返回行的正确数目,getEllipsisCount(N)永远不会返回> 0,甚至当我可以清楚地看到它添加省略号。

所以我猜这已经成为一种不好的方式来检测文本是否已经离开屏幕......所以没有人知道更合适的方式,或如何让这个工作?

+0

难道是StaticLayout需要先绘制?有没有一种方法可以用来测试省略号而不显示用户? – 2011-02-28 14:52:39

+0

你可以确定一个textview是椭圆化的吗? – sgarman 2011-11-10 22:38:13

+0

不,我相信在返回有效值之前必须绘制文本。但我最初问这是为了创建另一个问题的解决方案,看看你是否需要在那里:http://*.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – 2011-11-11 03:58:49

我也在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); 
       }); 

这是无可否认有点hackish的,但它是我能得到的唯一途径省略号被正确检测,否则它只是不断报告没有发生省略。在我的测试中,延迟对于这项工作至关重要,但整个项目的执行速度足够快,以便可以根据这些信息隐藏/显示元素,而不会出现UI闪烁现象。

+1

+1谢谢 - 能够使用这个'_textView.post'而不是'.postDelayed'。 – 2013-08-26 19:29:17