获取textview行数

获取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 );
    }
}
时间: 2024-10-18 05:39:05

获取textview行数的相关文章

linux c 获取文件行数

源代码如下: /*获取文件行数*/ int file_wc(const char *filename) { int fd; register int linect = 0; char buf[MAXBSTZE]; int len; char *p = NULL; if(filename) { if((fd = open(filename, O_RDONLY)) < 0) { fprintf(stderr, "open %s\n",strerror(errno)); return

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

Oracle 随机获取N条数据    当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这样的目的1) select * from (select * from tablename order by sys_guid()) where rownum < N; 2) select * from (select * from tablename order by dbms_random.va

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

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

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

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

PHP获取文件行数

原文出处 提供两种实现方法,但是第一种效率最好 第一种: <?php $file_path = 'test.txt'; //文件路径 此处找一个1094644行的TXT文件 test.txt $line = 0 ; //初始化行数 //打开文件 set_time_limit(0); echo "开始时间:".date("H:i:s")."</br>"; //此处设一个计时器 开始时间 $fp = fopen($file_path

C# 获取textbox行数

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

TextView 行数控制

控制textview只显示 2 行文本,超过 2 行显示展开/折叠按钮(mShowImage),isShow=true时,是展开状态,isShow=false时,是折叠状态 方法一: int line = textView.getLineCount(); if (line > 2 && ! isShow) { textView.setLines(2); textView.setEllipsize(TextUtils.TruncateAt.END); mShowImage.setVis

获取二维数组里面实际存有数据的行数

写程序时遇到需要获取二维数组里面实际存有数据的行数,看到几篇博客中获取数组行数用的居然是array.Rank方法.这是获取维度的方法啊,我在下面贴出了我找到的正确的方法,很实用. /// <summary> /// 获取二维数组里面实际存有数据的行数 /// </summary> public static List<int> GetHasValueRowIndex(string[,] arr) { var hasValueRowIndex = new List<

获取文件的行数

// 获取文件行数 function lines($fileName) { $fp = fopen($fileName, "r"); $line = 0; while (!feof($fp)) { //每次读取1M if ($data = fread($fp, 1024 * 1024 * 1)) { //计算读取到的行数 $num = substr_count($data, "\n"); $line += $num; } } fclose($fp); return