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

Android中获取TextView行数的更多相关文章

  1. 获取textview行数

    获取textview行数 textview 代码 import android.content.Context; import android.graphics.Canvas; import andr ...

  2. [项目总结]怎么获取TextView行数,为什么TextView获取行数为0?

    1 final TextView textView = new TextView(this); 2 ViewTreeObserver viewTreeObserver = textView.getVi ...

  3. oracle 与sql serve 获取随机行数的数据

    Oracle 随机获取N条数据    当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这 ...

  4. android中获取时间

    android中获取时间 1)通过calendar类获取 Calendar calendar = Calendar.getInstance();int moth = calendar.get(Cale ...

  5. Android中为TextView增加自定义的HTML标签

    Android中的TextView,本身就支持部分的Html格式标签.这其中包括常用的字体大小颜色设置,文本链接等.使用起来也比较方便,只需要使用Html类转换一下即可.比如: textView.se ...

  6. Android中获取应用程序(包)的大小-----PackageManager的使用(二)

    通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...

  7. Android中获取正在运行的应用程序-----ActivityManager.RunningAppProcessInfo类详解

    今天继续讲解关于ActivityManager的使用,通过前面一节的学习,我们学会了如何利用ActivityManager获取系统里 正在运行的进程.本文要讲解的知识点是利用这些进程信息获取系统里正在 ...

  8. shell获取文件行数

    获取文件行数: echo `cat $file | wc -l` 获取文件中不重复的行数(去重后) echo `awk '{$1="";print $0;}' $file_tel ...

  9. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

随机推荐

  1. python学习,day2:利用列表做购物车实例

    一个购物车 # coding=utf-8 # Author: RyAn Bi import sys , os goods = [['iphone',5800],['mate20pro',5000],[ ...

  2. JavaWeb后台从input表单获取文本值的两种方式

    JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...

  3. spark第十一篇:spark-submit命令支持选项

    [root@linux-node3 bin]# ./spark-submit --help Usage: spark-submit [options] <app jar | python fil ...

  4. Java中的值传递和地址传递(传值、传引用)

    首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中.更何况,要想知道 ...

  5. PyCharm | 常见问题

    1.安装使用 每次建立PyCharm工程都建立一个虚拟环境env,需要重新下载或复制模块

  6. input输入框中只能输入数字,非数字字符自动清除

    前言:项目中有个缴纳保证金的功能,要是输入框只能输入数字,不能输入其他字符. ①HTML代码:<input class="input-box" type="text ...

  7. JavaScirpt事件处理

    一.事件流 事件流,描述的是页面中接受事件的顺序,不过,IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕获型.标准同时支持两种事件模型,即捕获型事件与冒泡型事件, ...

  8. MySQL按照月进行统计

    MySQL按照月进行统计 今天需要后台提供一个按月统计的API.所以查了一下SQL语句的实现方法. 按月统计SQL select date_format(createtime, '%Y-%m') as ...

  9. 深入redis内部--初始化服务器

    初始化服务器代码如下: void initServer() { int j; signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN); setupSigna ...

  10. 在局域网中查找特定设备的 IP

    如何查找特定设备的 IP 有几种方法在局域网中找到某个设备(设为设备 A)的 IP 地址: 在设备 A 上运行一段程序,该程序每隔一段时间向局域网中发送广播包(UDP 广播包),(设备 B)上运行另一 ...