Android 如何在textView里面获取行数

来源:互联网 发布:欧弟加入德云社 知乎 编辑:程序博客网 时间:2024/06/05 06:43

前言:项目需求里面有这个需求,就是当一个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
原创粉丝点击