在日常开发中经常会有文字过长时折叠或者收起功能,往往会通过先得到TextView的行数,超过行数就折叠。
1.ViewTreeObserver
mTextView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if(mTextView.getLineCount()>0){
//TODO
mTextView.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
}
}
});
这种方式,会有一定的延迟,并且可能会调用多次,在列表中效果不太好,记得remove掉监听
2.View.post
mTextView.post(new Runnable() {
@Override
public void run() {
//TODO
}
});
该种方式会把Runnable添加到队列,等view绘制完成,再去获取view宽高
3.StaticLayout
此种方式可参考juejin.cn/post/684490…