ListView中TextView 跟据内容设置行数

项目中有这样的需求,类似微信朋友圈,比如发布了一个文字状态,可以展开和收缩,用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);
  }

特别记录一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值