Android 如何在textView里面获取行数

本文介绍如何在TextView内容加载完成后准确判断其行数,并根据行数显示或隐藏“展开”按钮。同时,还提供了通过改变TextView高度来实现平滑展开动画的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:项目需求里面有这个需求,就是当一个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);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值