获取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. H5调试

    在PC上的调试 问题:需要调试样式,没有数据不方便调试. 方案:本地mock. EG: chrome书签管理器 →将下面代码存书签里,如下图: javascript: void function() ...

  2. Access连接字符串

    Access2007没有密码连接: <connectionStrings> <add name="myconn" connectionString="P ...

  3. jQuery静态分页功能

    分页功能在做项目的过程中是常常用到的,下面是我常用的一款分页效果: 1.分页的CSS样式(page.css) #setpage { margin: 15px auto; text-align: cen ...

  4. 三十道DP练习(持续更新)(pw:DP)

    前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:201 ...

  5. 威士忌(whiskey)

    威士忌(whiskey) 题目描述 Alan 喝了假威士忌,想问你一个问题: nvliu66 推荐大家读三本书<百年孤独>.<城市发展史>.<美国大城市的生与死>, ...

  6. DP———6.两个状态之间的 处理

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  7. ubuntu14 简单安装ffmpeg

    1.简单安装 sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next     sudo apt-get update     sudo apt ...

  8. 2015年4月1日 14:36:56 EF 主从表更新

    公司封装框架的人把eF封在了工作单元里面,使用了Unitofwork这样的形式, 我用代码生成器生成了基础的单表操作的代码. 这种方式对多表有问题. 暂时只得,一张表一张表地操作, 我采用先用List ...

  9. 各版本Sql Server下载地址全

    SQL Server 2014简体中文企业版 文件名:cn_sql_server_2014_enterprise_edition 32位下载地址:ed2k://|file|cn_sql_server_ ...

  10. 高级全局API钩取 - IE连接控制

    @author: dlive @date: 2017/02/14 0x01 调试IE进程 常见网络连接库:ws2_32.dll(套接字),wininet.dll,winhttp.dll 使用Proce ...