Android 获取View的高度或TextView的行数, 实现自适应的textview

在Android开发中,正确获取View的高度或TextView的行数是个常见需求,但直接在onCreate()中使用getLineCount()可能返回零,原因是视图还未完全渲染。解决这个问题的方法包括在onCreate()中启动异步操作,等待绘制完成的回调,或者创建自定义的AsyncTask来确保在视图绘制完毕后进行计算。
摘要由CSDN通过智能技术生成

     大家都遇到过项目中需要获控件的的高度或者列如文章开头说TextView的行数 但是很多人在实际操作中getLineCount()获取到值是零,其实只是我们没在正确的位置获取。

   这是因为activtiy的onCreate()时候view 还没渲染完成,和view的生命周期有关 在onCreate()设置contentview其实是用Pull解析XML绘出到activity上的 很多开发很久的人绝对对view 不陌生, 这里就不对view做详细说明 ,因为这说起来十几篇都说不完, 只要知道在onCreate()时候view只是在做控件的大小测量,和布局排版就可以了 ,具体绘制时间不定时 有可能onResume() 就完成了 有可能上个周期绘制完成 具体可去看下 《view的加载过程》一文。

   那么问题来了 怎么解决上诉问题呢  

 方法一 :

   那么就在onCreate()里开启异步操作,先上代码

  tv_content.post(new Runnable() {
       @Override
            public void run() {
              oldlines = tv_content.getLineCount();
    }
});

   通过此代码就可以等到绘制完成的接口回调

方法二:

  自定义一个AsyncTask类 ,重写方法即可


privateclassMyOpenTask extendsAsyncTask<Integer, Integer, Integer> {  
       privateint[] location = newint[2]; 
   
       @Override 
       protectedvoidonCancelled() {  
           super.onCancelled(); 
       } 
   
       publicvoidstart() {  
           execute(0); 
       } 
   
       @Override 
       protectedInteger doInBackground(Integer... params) {  
           return1; 
       } 
   
       @Override 
       protectedvoidonPostExecute(Integer result) {  
           super.onPostExecute(result); 
           intlinecount = mVideoDescription.getLineCount();  
          //这里就可以拿到行数做判断 具体看你做什么操作了
       } 
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值