当前位置: 代码迷 >> Android >> 自定义控件中,怎么测量换行文字的整体高度
  详细解决方案

自定义控件中,怎么测量换行文字的整体高度

热度:97   发布时间:2016-04-28 01:00:58.0
自定义控件中,如何测量换行文字的整体高度?
我通过重写TextView来自定义一个控件,需要得到文本绘制出来后有多高。单行文本很好得到,但不知道多行文本如何测量整体。谢谢各位了。
------解决思路----------------------
行高×计算出的行数,就能算出高度了

        protected String[] getTextLines(String text, float fontSize, float boundWidth) {
            if (StringHelper.isNullOrEmpty(text)) {
                return new String[0];
            }
            Paint p = getPaint();
            if (p == null)
                p = new Paint();
            p.setTextSize(fontSize);
            float wid = boundWidth;
            String[] lines = text.split("\n");
            ArrayList<String> drawLines = new ArrayList<String>();
            StringBuilder stringBuilder = new StringBuilder();
            for (String str : lines) {
                stringBuilder.delete(0, stringBuilder.length());
                float[] charWidths = new float[str.length()];
                p.getTextWidths(str, charWidths);
                float w = 0;
                for (int i = 0; i < str.length(); i++) {
                    float len = charWidths[i];
                    w += len;
                    if (w >= wid) {
                        drawLines.add(stringBuilder.toString());
                        stringBuilder.delete(0, stringBuilder.length());
                        w = 0;
                    }
                    stringBuilder.append(str.charAt(i));
                }
                if (stringBuilder.length() > 0) {
                    drawLines.add(stringBuilder.toString());
                }
            }
            String[] outLines = new String[drawLines.size()];
            for (int i = 0; i < drawLines.size(); i++) {
                outLines[i] = drawLines.get(i);
            }
            return outLines;
        }

//-------------------------------------------------------------------
        paint.setTextSize(fontSize);
        Paint.FontMetrics metrics = paint.getFontMetrics();
        float fontHeight = metrics.bottom - metrics.top;
        float lineHeight = fontHeight + lineSpan;   //行高
  相关解决方案