获取textview行数

textview

代码

import android.content.Context;
import android.graphics.Canvas;
import android.text.Layout;
import android.text.Layout.Alignment;
import android.text.StaticLayout;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView; /**
* @author jasonkent27
*
* TextView第二行文字超过一半则自动略去,并添加省略号
*/
public class CustomWidgetTextView extends TextView { private float mLineSpacingMultiplier = 1.0f;
private float mLineAdditionalVerticalPadding = 0.0f;
/**
* setText时需要置为true
*/
private boolean mNeedResetText = true ; public CustomWidgetTextView(Context context) {
this(context, null);
} public CustomWidgetTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
} public CustomWidgetTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} @Override
protected final void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
mNeedResetText = true ;
} @Override
protected void onDraw(Canvas canvas) {
if (mNeedResetText) {
resetText();
mNeedResetText = false ;
}
super.onDraw(canvas);
} /**
* 重TextView内部文字渲染逻辑
*/
private void resetText() { if (!TextUtils.isEmpty(getText())) { String origText = getText().toString();
String firstLineText ;
String secondLineText ;
String resultText = origText ; Layout layout = createRenderLayout(origText, getWidth() - getPaddingLeft() - getPaddingRight());
if (layout.getLineCount() > 1) {
//取出第一,二行文字
firstLineText = origText.substring(0, layout.getLineEnd(0));
secondLineText = origText.substring(layout.getLineEnd(0)+1, layout.getLineEnd(1)); Layout layout2 = createRenderLayout(secondLineText, (getWidth() - getPaddingLeft() - getPaddingRight()) / 2);
//第二行文字长度过半,则截断并且添加省略符
if (layout2.getLineCount() > 1) {
secondLineText = secondLineText.substring(0, layout2.getLineEnd(0)) + "...";
}
resultText = firstLineText + secondLineText ;
}
setText(resultText);
}
} /**
* @param workingText
* @param width
* @return StaticLayout @See https://developer.android.com/reference/android/text/StaticLayout.html
*/
private Layout createRenderLayout(CharSequence workingText, int width) {
return new StaticLayout(
workingText,
getPaint(),
width,
Alignment.ALIGN_NORMAL,
mLineSpacingMultiplier,
mLineAdditionalVerticalPadding,
false );
}
}

获取textview行数的更多相关文章

  1. Android中获取TextView行数

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

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

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

  3. PHP如何获取文件行数

    本文实例讲述了PHP获取文件行数的方法.分享给大家供大家参考.具体分析如下:提供两种实现方法,虽然第二种简单易懂,但是第一种效率最好第一种: <?php $file_path = 'xxx.tx ...

  4. shell获取文件行数

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

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

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

  6. SQL 从指定表筛选指定行信息 获取表行数

    1.获取指定表的行数 --获取表中数据行数 --select max([列名]) from 表名 2.筛选指定表的指定行数据(数据表分页获取) http://www.cnblogs.com/morni ...

  7. PHP获取文件行数

    原文出处 提供两种实现方法,但是第一种效率最好 第一种: <?php $file_path = 'test.txt'; //文件路径 此处找一个1094644行的TXT文件 test.txt $ ...

  8. C# 获取textbox行数

    当textbox为多行时,获取它的行数:int count = this.txtMsgInfo.Lines.GetUpperBound(0);

  9. easyUI中datagrid控制获取指定行数的数据

    直接上代码: var rows=$('#detail').datagrid('getRows');//获取所有当前加载的数据行 var row=rows[0];// 行数从 0 开始 项目中代码: v ...

随机推荐

  1. Client does not support authentication protocol requested by server

    关于由于版本号码不同而引起的 Client does not support authentication protocol requested by server 问题 搜索类似的问题,得到的答案类 ...

  2. 【Luogu】P3760异或和(权值树状数组)

    题目链接 再次声明以后我见到位运算一定第一时间想把它拆成每一位算 本题就是有个前缀和sum[],然后让你求每一位有多少对i,j满足sum[i]-sum[j]在那一位上是1 考虑怎样才能减出1来 如果s ...

  3. [CF949C]Data Center Maintenance

    题目大意:$n$个点,每个点有一个值$w_i$.$m$个条件,每个条件给出$x,y$,要求$w_x\not =w_y$.选择最少的点,使其值加$1$后,所有条件成立(数据保证有解). 题解:对于每个条 ...

  4. Eclipse Tomcat 配置问题

    问题描述: Tomcat能启动,ecplise的Console无报错,但是打开http://localhost:8080/报404错误 端口是8080没错,地址也没错,重启了tomcat还是报错,但是 ...

  5. webpack最佳入门实践系列(4)

    7.使用字体 7.1.安装字体库-font-awesome 我们通过npm来安装字体 npm install font-awesome --save 这个时候,我们的package.json配置文件变 ...

  6. 大工程(bzoj 3611)

    Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道.  我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上.  在 2 个国家 a,b 之间建一条新通 ...

  7. Codeforces Round #395 Div.2 题解

    感受 第一次参加CF的rating比赛,感觉还是非常exciting,前18分钟把AB切掉之后一直在考虑C题,结果最后还是没有想出来Orz 传送门 A 比较水的模拟,就是计算:\(\frac{z}{l ...

  8. VS程序打包软件

    由于InstallShield Limited Edition for Visual Studio的教程.资料太少,所以我今天才决定写这个文章,专门针对C#项目打包,包括打包集成Microsoft . ...

  9. 【原创】SQL Server Job邮件详细配置

    1 简介 SQL Server 代理具有发送电子邮件的功能.您可以配置 SQL Server 代理邮件,使其在出现下列情况时向预定义的操作员发送电子邮件: 警报触发时.可以配置警报,以针对所发生的特定 ...

  10. 想转行做web前端工程师,必学这6大技能

    web前端工程师是近几年才发展出来的新兴职业,也是目前火爆且高薪的职业.大需求的市场环境下,出现了越来越多的人群转行做web前端工程师,如设计师.后台程序员.网虫.大学其他专业.策划.编辑等等. 要学 ...