项目中有这样的需求,类似微信朋友圈,比如发布了一个文字状态,可以展开和收缩,用Listview来实现。
如果直接调用textview.getlinecount()这个方法的话,结果总是0,如果调用getviewtreeoberserver()这个监听的话,因为listview会复用convetview,所以不是每个item都会获取textview的行数,如果调用textview.post(new Runnable())这个方法,是可以获取每个item里面的textview的行数,但是会卡顿......
解决方法:用measureText方法
float text_with = viewHolder.textview.getPaint().measureText("很多字符");//获取文字的总宽度
int tv_width = PublicUnitls.getScreenWidth(mContext)-PublicUnitls.dip2px(mContext,20);//根据自己的布局获取textview的总宽度,我的textview距离两边分别是10dp
float lines_float = text_with/tv_width;//总长度除了textview长度,得到行数
int lines = (int)Math.ceil(lines_float);//向上取整
if(lines>5){
//起过5行,取设置行数,收缩
viewHolder.textview.setMaxLines(5);
}
else{
viewHolder.textview.setMaxLines(lines);
}
特别记录一下