• 获取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 );
        }
    }
    
  • 相关阅读:
    ubuntu安装mysql并使用Navicat连接
    二叉树基础知识点
    Javascript 16进制转有符号的10进制整数
    Node.js 学习笔记(二)
    API测试如何演变为应用程序开发的常规部分
    API在线文档
    API文档自动生成的方法
    快速对比API版本
    如何使用OPENAPI进行质量检查
    【分享】什么是API网关?大公司为什么都有API网关?
  • 原文地址:https://www.cnblogs.com/jasonkent27/p/5642790.html
Copyright © 2020-2023  润新知