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

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

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

 <TextView android:id="@+id/some_id" android:layout_width="fill_parent" android:layout_height="0dip" android:ellipsize="end" android:maxLines="4" android:singleLine="false" android:layout_weight="1" android:gravity="center_vertical" android:text="This is some really really really really really long text" android:textSize="15sp" /> 

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

 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#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); } });