android获取textview换行后高度不准确问题

4人阅读 评论(0) 收藏 举报
分类:

网上的加以修改

import android.content.Context;
import android.text.Layout;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by Administrator on 2018/4/16.
 */

public class MTextView extends TextView {

    private Context context;

    public MTextView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    public MTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    public MTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int mode = MeasureSpec.getMode(heightMeasureSpec);
        Layout layout = getLayout();
        if (layout != null) {
            int height = (int) Math.ceil(getMaxLineHeight(this.getText().toString(), mode))
                    + getCompoundPaddingTop() + getCompoundPaddingBottom();
            int width = getMeasuredWidth();
            setMeasuredDimension(width, height);
        }
    }

    private float getMaxLineHeight(String str, int mode) {
        float height = 0.0f;
        float width = getMeasuredWidth();
        float widthPixels = context.getResources().getDisplayMetrics().widthPixels;
        //这里具体this.getPaint()要注意使用,要看你的TextView在什么位置,
        // 这个是拿TextView父控件的Padding的,为了更准确的算出换行
        float pLeft = ((LinearLayout) getParent()).getPaddingLeft();
        float pRight = ((LinearLayout) getParent()).getPaddingRight();
        //检测字符串中是否包含换行符,获得换行的次数,在之后计算高度时加上
        int br = 0;
        if (str.contains("\n"))
            br = str.split("\n").length - 1;
        /**
         *  wrap_content/未指定宽度(MeasureSpec.UNSPECIFIED),则用屏幕宽度计算
         *  否则就使用View自身宽度计算,并且无需计算Parent的Padding
         */
        int line;
        if (mode == MeasureSpec.UNSPECIFIED)
            line = (int)
                    Math.ceil((this.getPaint().measureText(str) /
                            (widthPixels - getPaddingLeft() - pLeft - pRight - getPaddingRight())));
        else {
            line = (int)
                    Math.ceil((this.getPaint().measureText(str) /
                            (width - getPaddingLeft() - getPaddingRight())));
        }
        float linespace = this.getLineSpacingExtra();
        height = (this.getPaint().getFontMetrics().descent -
                this.getPaint().getFontMetrics().ascent) * (line + br) + (linespace*(line+br));
        return height;
    }
}

查看评论

自定义TextView,解决计算listView中item高度的时候,如果其中的TextView字数超过一行,只计算到一行高度的问题

动态计算listView中item 的高度时,如果其中textview超过一行,只会计算其中第一行的刚度,(双层listview嵌套使用时经常出现这种问题)。我们需要自定义textview,动态计算t...
  • myrssq
  • myrssq
  • 2016-07-07 10:49:16
  • 1861

自定义TextView,解决文字换行,\n换行符换行,导致高度计算不对问题(计算ListView高度)

刚遇到一个问题,如题,我有2个ListView嵌套,所以需要计算嵌套中的ListView高度,然后就发现,TextView 中的文字换行会导致高度计算有误,只算到一行,So,上网查解决方法,找到的方法...
  • z609933542
  • z609933542
  • 2016-11-15 10:22:46
  • 1101

TextView的高度测量问题。

最近被TextView的高度测量问题搞得好烦,最终在http://blog.csdn.net/tianlan996/article/details/50408169 这篇博客看过后才搞懂原因,其实看过...
  • tinderliang
  • tinderliang
  • 2016-12-19 15:03:04
  • 1310

Android TextView 换行不对齐的问题

  • 2016年06月30日 09:23
  • 108KB
  • 下载

android textview自动换行、排列错乱问题及解决

今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下。经过研究之后,终于找到了textview自动换行导致混乱的原这个问题是由于:半角字符与全角字符混乱所致!一般情况...
  • zhuangyalei
  • zhuangyalei
  • 2016-08-08 14:36:48
  • 3457

boundingRectWithSize计算高度不准确

新api计算高度不准确时,请注意参数问题, options,attributes CGRect rect= [str boundingRectWithSize:CGSizeMake(100, MAXF...
  • jiajiayouba
  • jiajiayouba
  • 2015-03-21 17:20:49
  • 15549

Android TextView中标点符号或英文导致自动换行问题

Android的TextView在显示文字的时候有个问题就是一行还没显示满就跳到下一行,比如:原因: 1) TextView在显示中文的时候 标点符号不能显示在一行的行首和行尾,如果一个标点符号刚好...
  • ggsmite
  • ggsmite
  • 2016-07-23 01:20:50
  • 864

TextView 自动换行导致文字排版参差不齐的原因

Android
  • wenbitianxiafeng
  • wenbitianxiafeng
  • 2014-11-19 21:00:40
  • 5343

Android 获取View的高度或TextView的行数, 实现自适应的textview

大家都遇到过项目中需要获取文本的高度或者行数
  • sk719887916
  • sk719887916
  • 2014-10-14 11:12:45
  • 2633

Android 自绘TextView解决提前换行问题,支持图文混排

先看下效果图: 上面是MTextView,下面是默认的TextView。   一、原因 用最简单的全英文句子为例,如果有一个很长的单词,这一行剩余的空间显示不下了,那么规则就是不打断单词,而是把整个单...
  • yellowcath
  • yellowcath
  • 2014-05-29 15:18:43
  • 20266
    个人资料
    等级:
    访问量: 2万+
    积分: 705
    排名: 6万+
    最新评论