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

    动态计算listView中item 的高度时,如果其中textview超过一行,只会计算其中第一行的刚度,(双层listview嵌套使用时经常出现这种问题)。我们需要自定义textview,动态计算textView的高度,具体代码如下

package com.example.wisdomoperating.view;

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

/**
 * 
 * @author zhengaoyang 
 *自定义TextView,解决计算listViewitem高度的时候,如果其中的TextView字数超过一行,只计算到一行高度的问题
 */


public class myTextView extends TextView {

   private Context context;
   public myTextView(Context context) {
      super(context);
      // TODO Auto-generated constructor stub
      this.context = context;
   }
   public myTextView(Context context, AttributeSet attrs) {
      super(context, attrs);
      // TODO Auto-generated constructor stub
      this.context = context;
   }
   public myTextView(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);

       Layout layout = getLayout();
       if (layout != null) {
           int height = (int)FloatMath.ceil(getMaxLineHeight(this.getText().toString()))
                   + getCompoundPaddingTop() + getCompoundPaddingBottom();
           int width = getMeasuredWidth();            
           setMeasuredDimension(width, height);
       }
   }

   private float getMaxLineHeight(String str) {
      float height = 0.0f;
      float screenW = ((Activity)context).getWindowManager().getDefaultDisplay().getWidth();
      float paddingLeft = ((LinearLayout)this.getParent()).getPaddingLeft();
      float paddingReft = ((LinearLayout)this.getParent()).getPaddingRight();
//这里具体this.getPaint()要注意使用,要看你的TextView在什么位置,这个是拿TextView父控件的Padding的,为了更准确的算出换行
 int line = (int) Math.ceil( (this.getPaint().measureText(str)/(screenW-paddingLeft-paddingReft))); 
 height = (this.getPaint().getFontMetrics().descent-this.getPaint().getFontMetrics().ascent)*line; return height;}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值