获取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 );
}
}

最新文章

  1. Android线程处理之Handler总结
  2. 设计模式学习——观察者模式(Observer Pattern)
  3. $("<div />")代表的意思
  4. MyEclipse的 at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>错误解决办法
  5. ExtJs FormPanel布局
  6. c++二分答案 之 跳石头
  7. 【DP_背包专题】 背包九讲
  8. Windows常见蓝屏故障分析
  9. 怎样在Ubuntu中使用条件布局
  10. instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别
  11. SQLSERVER 运维日记-数据库状态
  12. 201521123115《java程序设计》第9周学习总结
  13. Mysql之SQL经验基础积累
  14. virtualBox centos 6.5 硬盘扩容
  15. PATH环境变量
  16. winform生成条形码和二维码(ZXing.Net)
  17. 11、jQuery其余操作
  18. Lab 3-1
  19. Ant Man CodeForces - 704B (图论,贪心)
  20. redis在PHP中的基本使用案例(觉得比较实用)

热门文章

  1. bash语法注意点
  2. oracle基础概念学习笔记
  3. 将MSHFlexGrid1中记录导出为Excel
  4. bpf 指令集
  5. GCD 开发详情
  6. SQL Server 重新编译存储过程的方式有三种
  7. hdu1007 平面最近点对(暴力+双线程优化)
  8. Password [分块]
  9. 02 Java 基础语法
  10. hashCode()方法和equals方法的重要性。