Android 获取TextView行数

项目中发现,如果直接通过TextView.getLineCount()方法获取行数时,总是0,研究发现,setText()后立即调用getLineCount(),

这时TextView还未完成measure,要想正确的获取TextView的行数有两种方法

1.用ViewTreeObserver监听View初始化的各种状态

使用ViewTreeObserver的OnPreDrawListener在TextView完成测量和定位即将绘制时调用getLineCount()即可得到TextView的真实行数,代码如下:

tv_test.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {    @Override    public boolean onPreDraw() {        //这个回调会调用多次,获取完行数记得注销监听        tv_test.getViewTreeObserver().removeOnPreDrawListener(this);        LogUtils.e("TextView 行数:" + tv_test.getLineCount());        return false;    }});tv_test.setText("老人取件发现巨奖将计就计反忽悠骗子老人取件发现巨奖”");


注意红框部分。

2.View.post(Runnable r)方法

代码如下:

tv_test.post(new Runnable() {    @Override    public void run() {        LogUtils.e("行数:"+tv_test.getLineCount());    }});tv_test.setText("老人取件发现巨奖将计就计反忽悠骗子老人取件发现巨奖”");


这个Runnable会被添加到一个顺序执行的UI事件队列,等执行到里面的代码时,View已经完成了measure和layout等一系列

初始化工作,所以可以正确获取到View的高度等信息

更多相关文章

  1. android GSM+CDMA基站定位--获取移动网络相关信息
  2. Android(安卓)ionic工程中调用webrtc获取视频流
  3. Android(安卓)选择文件并获取路径
  4. /mnt/sdcard与Environment.getExternalStorageDirectory()的使用
  5. 几个比较混淆概念,android中的Info类以及PackageManager和Activit
  6. android media server 解析1-media player service 结构部分
  7. Mac删除JDK
  8. android中webview接收favicon总是获取为null解决方案
  9. Android(安卓)PendingIntent

随机推荐

  1. 轻松玩转Python发送新春祝福给指定好友
  2. Python 的四种共享传参详解
  3. 数据分析框架和任务拆解?看看大神怎么做!
  4. Cocos平台 | 快速集成AGC云函数服务
  5. 关于数据科学的趋势和前景,这里有你想了解
  6. 推荐:这才是你寻寻觅觅想要的 Python 可视
  7. 谁为你的健康数据负责?
  8. 推荐一个牛逼的生物信息 Python 库 - Das
  9. 用 Python 分析了 20 万场吃鸡数据
  10. 阅读优秀 Python 开源项目的代码,提升编程