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

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

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

转载于:https://www.cnblogs.com/jasonkent27/p/5642790.html

你可能感兴趣的文章
Spring事务管理
查看>>
linux下mysql配置文件my.cnf详解
查看>>
SublimeText快捷键操作
查看>>
Python开发 基礎知識 (未完代補)
查看>>
08ssm三大框架整合以前步骤
查看>>
R语言学习笔记之八
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>
SQL总结(一)基本查询
查看>>
PDF分割--可脱离python环境执行,可传参数,可弹窗的PC端小工具
查看>>
layui中的html怎样接收后台的值,layui框架与SSM前后台交互的方法
查看>>
Skulpt在线模拟运行Python工具
查看>>
287.软件测试概述
查看>>
297.白盒测试
查看>>
新闻客户端的突破与创新
查看>>
网络通信引擎ICE的使用
查看>>
js滚动事件实现滚动触底加载
查看>>
架构妄想:AJAX + REST
查看>>
css垂直居中的问题
查看>>
如何正确从他人机器MySQL数据库下拷贝出.sql,再导入到自己windows下MySQL数据库(图文详解)...
查看>>
面向对象之选课系统
查看>>