android 关于TextView getLineCount() 获得的值始终为0问题

在Android开发中,遇到一个需求,需要根据TextView的行数设置显示位置。通过getLineCount()获取行数时,发现始终得到0。解决办法是在ViewTreeObserver的onPreDrawListener中调用,这样能获取到正确的行数。

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

最近公司android客户端有个需求,根据文本行数的不同,设置不同的显示位置,解决这个需求,首先得获得TextView的真实行数,于是调用getLineCount()方法,结果这个值获得的始终为0 ,关于如何获得真实的行数值,有以下解决方案:

1,绘画完成之前调用的,在这里面可以获取到行数,当然也可以获取到宽高等信息。

 ViewTreeObserver vto = mContent.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                if(mContent.getLineCount() == 1){
      
                } else {
               
                }
                return false;
            }
        });

2,绘画完成之后调用的,在这里面可以获取到行数,当然也可以获取到宽高等信息。
 mContent.setText(barModel.getContentTitle());


        mContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {


            @Override
            public void onGlobalLayout() {




                mContent.getViewTreeObserver().removeGlobalOnLayoutListener(this);


                if(mContent.getLineCount() == 1){
                    Log.e("TAG","---------"+mContent.getLineCount());
   
                } else {
          
                }


            }
        });

3,
使用post,绘制完成在调用getLineCount()

mContent.post(new Runnable() {
    @Override
    public void run() {
        if(mContent.getLineCount() == 1){
            mContent.setPadding(0,(int)mContext.getResources().getDimension(R.dimen.space_12),0,0);
            mReadNum.setPadding(0,0,0,(int)mContext.getResources().getDimension(R.dimen.space_12));
            mCollectionNum.setPadding(0,0,0,(int)mContext.getResources().getDimension(R.dimen.space_12));
        } else {
            mContent.setPadding(0,0,0,0);
            mReadNum.setPadding(0,0,0,0);
            mCollectionNum.setPadding(0,0,0,0);
        }
    }
});

经过测试三种方案均可行,但是如果是listview中TextView,根据LineCount切换位置,会出现
TextView复用,导致TextView位置在滑动速度快的情况下位置瞬间混乱,采用第三种方案没有此问题,至于采用前两种方案出现问题的原因不得而知,有遇到这种情况的可以一起探讨一下原因。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值