Android 如何在textView里面获取行数

前言:项目需求里面有这个需求,就是当一个textView 框里的字符行数少于两行时,不显示展开查看更多按钮,当大于两行才显示。看起来很简单,直接先textView.setText(""");

然后再 textView.getLineCount();   然而获取的总行数始终是0;这是为什么呢?原来 只有内部的Layout创建之后才会返回正确的行数,那怎么保证layout已经构创建了呢?看代码吧!
 mGameIntroTv.setText(data.getIntro());
        mGameIntroTv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int lineCount = mGameIntroTv.getLineCount();
                if (lineCount<=2){
                    mLookMoreTv.setVisibility(View.GONE);
                    mLookMoreImgUp.setVisibility(View.GONE);
                }
                mGameIntroTv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
当TeXtView在绘制的时候就会回调这个方法,注意当我们得到了想要的值之后注意移除GlobalOnLayoutListener避免多余的执行,而且我的项目需求是要后面通过改变textview的高度实现平滑展开的动画。

/**
* 折叠效果
*/

tempHight = mTextView.getLineHeight() * mTextView.getLineCount() - startHight; //计算要展开高度
tempHight = mTextView.getLineHeight() * maxLine - startHight;//为负值,收缩的高度

Animation animation = new Animation() {
//interpolatedTime 为当前动画帧对应的相对时间,值总在0-1之间
protected void applyTransformation(float interpolatedTime, Transformation t) {
mTextView.setHeight((int) (startHight + tempHight * interpolatedTime));//原始长度+高度差*(从0到1的渐变)即表现为动画效果

}
};
animation.setDuration(1000);
mTextView.startAnimation(animation);






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值