博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中获取TextView行数
阅读量:4441 次
发布时间:2019-06-07

本文共 995 字,大约阅读时间需要 3 分钟。

项目中发现,如果直接通过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的高度等信息

转载于:https://www.cnblogs.com/zhujiabin/p/9871244.html

你可能感兴趣的文章
AngularJS 学习笔记值post传值
查看>>
maven+springMVC+mybatis+junit详细搭建过程
查看>>
iframe详细用法
查看>>
angularjs 使用angular-sortable-view实现拖拽效果(包括拖动完成后的方法使用)
查看>>
2015生命之旅---南京、南通、上海之行
查看>>
高精度练习之乘法(codevs_3117)
查看>>
小Z爱划水
查看>>
javascript中click和onclick的区别
查看>>
小程序BindTap快速连续点击页面跳转多次
查看>>
什么是架构?有几人说的清楚
查看>>
护士排班06
查看>>
大道至简:软件实践者的思想读后感
查看>>
Kiss MySQL goodbye for development and say hello to HSQLDB
查看>>
Python web多sitemap创建更新解决方案
查看>>
javase基础10
查看>>
Qt Font
查看>>
UILabel设置富文本格式显示
查看>>
[洛谷P3379]【模板】最近公共祖先(LCA)
查看>>
java程序——随机数求和
查看>>
HTML5的浏览器支持方案
查看>>