Ellipsize对于具有任意最大高度的多行TextView无法正常工作

我有一个未知最大高度的TextView ,它取决于设备的DPI /屏幕分辨率。 因此,例如,在和MDPI设备上,此最大高度使得一次只能显示2行,这个值可以增加到未定义的数字。

我的问题与ellipsizefunction有关。 假设某个设备允许显示4行。 如果我手动设置最大行数,就像这样……

  

……一切正常。 如果文本不合适,则在第四行的末尾添加省略号,如下所示:

 This is some really really really really really long... 

但我宁愿将行数设置为静态variables,因为我更喜欢支持任何DPI /屏幕分辨率组合。 因此,如果我删除maxLines ,则不再在第四行正确显示省略号,而是显示文本的不完整部分:

 This is some really really really really really long 

如果我略微增加TextView大小,我可以看到其余的文本仍在“其他Views ”的“后面”。 设置variablesmaxHeight似乎也不起作用。

我真的无法find解决这个问题的方法。 有任何想法吗? 如果它有帮助,我只使用Android v4.0.3及更高版本(API级别15)。

Solutions Collecting From Web of "Ellipsize对于具有任意最大高度的多行TextView无法正常工作"

使用TextView#getHeight()TextView#getLineHeight()计算TextView适合的行数。 然后调用TextView#setMaxLines()

 ViewTreeObserver observer = textView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int maxLines = (int) textView.getHeight() / textView.getLineHeight(); textView.setMaxLines(maxLines); textView.getViewTreeObserver().removeGlobalOnLayoutListener( this); } });