美文网首页
提前获取textview的高度

提前获取textview的高度

作者: 解语何妨话片时 | 来源:发表于2020-05-12 15:50 被阅读0次

    原文地址https://www.jianshu.com/p/7b0a3417e4fe

    /**
     * 提前获取textview行数
     */
    public class TextViewLinesUtil {
        public static int getTextViewLines(TextView textView, int textViewWidth) {
            int width = textViewWidth - textView.getCompoundPaddingLeft() - textView.getCompoundPaddingRight();
            StaticLayout staticLayout;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                staticLayout = getStaticLayout23(textView, width);
            } else {
                staticLayout = getStaticLayout(textView, width);
            }
            int lines = staticLayout.getLineCount();
            int maxLines = textView.getMaxLines();
            if (maxLines > lines) {
                return lines;
            }
            return maxLines;
        }
    
        /**
         * sdk>=23
         */
        @RequiresApi(api = Build.VERSION_CODES.M)
        private static StaticLayout getStaticLayout23(TextView textView, int width) {
            StaticLayout.Builder builder = StaticLayout.Builder.obtain(textView.getText(),
                    0, textView.getText().length(), textView.getPaint(), width)
                    .setAlignment(Layout.Alignment.ALIGN_NORMAL)
                    .setTextDirection(TextDirectionHeuristics.FIRSTSTRONG_LTR)
                    .setLineSpacing(textView.getLineSpacingExtra(), textView.getLineSpacingMultiplier())
                    .setIncludePad(textView.getIncludeFontPadding())
                    .setBreakStrategy(textView.getBreakStrategy())
                    .setHyphenationFrequency(textView.getHyphenationFrequency())
                    .setMaxLines(textView.getMaxLines() == -1 ? Integer.MAX_VALUE : textView.getMaxLines());
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                builder.setJustificationMode(textView.getJustificationMode());
            }
            if (textView.getEllipsize() != null && textView.getKeyListener() == null) {
                builder.setEllipsize(textView.getEllipsize())
                        .setEllipsizedWidth(width);
            }
            return builder.build();
        }
    
        /**
         * sdk<23
         */
        private static StaticLayout getStaticLayout(TextView textView, int width) {
            return new StaticLayout(textView.getText(),
                    0, textView.getText().length(),
                    textView.getPaint(), width, Layout.Alignment.ALIGN_NORMAL,
                    textView.getLineSpacingMultiplier(),
                    textView.getLineSpacingExtra(), textView.getIncludeFontPadding(), textView.getEllipsize(),
                    width);
        }
    }
    

    相关文章

      网友评论

          本文标题:提前获取textview的高度

          本文链接:https://www.haomeiwen.com/subject/ghgbnhtx.html