TextView未繪製情況下獲取其寬高

黑夜路口發表於2018-08-18

    /**
     * 注:StaticLayout是android中處理文字換行的一個類,TextView原始碼中也是通過這個類實現換行的,使用這個類可以
     * 在不進行TextView繪製的前提下得到TextView的寬高,這裡我們只需要獲取到高度即可,這個高度當然也可以通過post
     * 在run中獲取,但是這樣做會有一個問題,介面是先繪製顯示然後再計算高度根據我們的邏輯來收縮TextView的高度,在列表中
     * 會出現閃爍的問題。使用這個類一定要注意構造方法中引數的傳遞,保證引數和佈局中textView設定的一致,否則會有誤差
     * 這個問題和獲取三行高度的要求是一樣的
     *
     * @param textView
     * @param content
     * @param width
     * @return
     */
    public static int getTotalLineHeight(TextView textView, String content, int width) {
        if (TextUtils.isEmpty(content)) return 0;

        TextPaint textPaint = textView.getPaint();
        /**
         * width:表示textView的寬度,和佈局保持一致,達到這個寬度,StaticLayout會對文字進行換行處理
         * 1 :是行高
         * UIUtil.dip2Px(CONTENT_LINE_SPACING)  :是行間距
         */
        StaticLayout staticLayout = new StaticLayout(content, textPaint, width, Layout.Alignment.ALIGN_NORMAL,
                1, UIUtil.dip2Px(CONTENT_LINE_SPACING), true);
        return staticLayout.getHeight();
    }


相關文章