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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

    动态计算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;}
}

listView实现文字编辑的自动换行 listView实现文字编辑的自动换行. 立即下载

相关推荐

2022-03-02 Android APP 自动调整 TextView 文字大小仅显示一行

一、效果图如下,TextView 文字大小仅显示一行超过后自动调整大小。 二、源码 1、源码预览 2、重载TextView类,SingleLineZoomTextView 文件 package com.giada.textviewautozoom; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics...

海月汐辰 1898

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

刚遇到一个问题,如题,我有2个ListView嵌套,所以需要计算嵌套中的ListView高度,然后就发现,TextView 中的文字换行会导致高度计算有误,只算到一行,So,上网查解决方法,找到的方法都是一个public class myTextView extends TextView { private Context context; public myTextView(Contex

z609933542的博客 4089

TextView

TextView设置最多显示2行,然后多余的地方显示省略号,应该用android:maxLines="2"android:ellipsize="end"这个时候,当文本是1行的时候,就占1行的高度,2行就占2行的高度,如果你用android:lines="2"android:ellipsize="end"这时就算你是1行的文本,它也占2行的高度这两个的区别就是,一个是高度是可变化的,一个是高度是固...

ape1024的博客 289

textView计算文字高度不准的问题

利用系统的这个方法计算时,会出现显示不完文字 boundingRectWithSize: options:context: 其实 那个方法不会有误差,有误差的原因是size算得不对,UITextView底层是使用Text Kit渲染的文字,你需要考虑到NSTextContainer的两边边距  解决方法: CGSize size = [content bo

ynynynynx4的博客 1895

ScrollView 嵌入Listview,当Listview中的Textview多余一行高度如何重新计算

网上也有很多例子,简单总结下项目中遇到的情况 1 如果ListviewItem高度是固定的,也就是说,每一个listItem高度都是一模一样的,那么有如下计算方法     public int setListViewHeightBasedOnChildren(ListView listView) {         ListAdapter listAdapter = listVi

zs20082012的博客 982

android 测量文字长度,【Android】TextView文字长度测量和各种Padding解析

老规矩,先上张图o,这篇好像是分析篇,没有效果图。不管了,位置占着,老规矩不能坏,下面开始正文。这篇博客会讲得比较杂:TextView里各部分的大小该怎么测量?如何计算每行文字的长度?设置android:maxLines="1"和android:singleLine="true"有什么区别?为什么设置android:maxLines="1"时TextView的跑马灯效果就不能正常工作?TextVi...

weixin_33486249的博客 1146

Android TextView 判断文字内容是否超出显示省略号

TextView 判断文字内容是否超出显示省略号最近在做一个类似于QQ空间的一个社交圈的模块的开发。有一个需求是当用户发表的内容超出4行时,显示一个按钮,点击按钮展示全文。我还真没有发现TextView有获取文本内容有没有显示省略号这个方法。没办法,只能自己想办法了。 想法和思路 textview既然自己会显示省略号,内部肯定有算法判断了内容是否超出最大行数的,我是不是可以找到这个方法,或者找到

gentlemanyc的专栏 2万+

c# listview 添加合计记录条

c# listview 添加合计记录条 foreach ( ListViewItem lvi in listView1.Items)<br />{<br />      sum += float.Parse(lvi.SubItems[3].Text);               <br />}<br /><br /> <br />private void sumlistview()<br />{<br />            float sum = 0;          <br />        

永生天地 3525

TextView中换行符(\\n)显示不正常的问题

问题描述 在Android开发,使用TextView设置换行的时候,会有这种情况: 1、如果直接在XML文件中写入”aaaaa\nbbbb”可以换行,显示为: aaaaa bbbbb 2、在Java文件中用textViewObj.setText(“aaaa\nbbbb”)也可以换行,显示为: aaaaa bb

牛崽的博客 9939

winform中listview选中整行_C# listview选择行(多行)

listview控件既可用于显示菜单,也可用于显示表格。当用于显示表格时,即可以选择单行,也可以选择多行;listview控件提供了相应的属性,只需把相应的属性设置为真即可;既可以在控件属性中设置,也可以用一句代码设置。不管是选中 listview表格中的单行还是多行,一般都是要取数据进行相应操作,这就需要写程序来实现。一、listview选择行的设置方法一:1、选中 listview控件,单击“...

weixin_39731916的博客 1万+

TextView高度测量问题

最近被TextView高度测量问题搞得好烦,最终在http://blog.csdn.net/tianlan996/article/details/50408169 这篇博客看过后才搞懂原因,其实看过这篇文章后才想起 以前看过的视频里也有提到这个问题,只是我忘了,所以才走了一大段弯路,记录一下,给自己个警醒,也希望能帮到别人把。 经过查阅资料和实验,这里推荐两种方法,这两种方法有不

BackStreet221B夏洛克 4158

判断TextView文本内容是否超出一行

ViewTreeObserver vto2 = tv1.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout()

zhang3371289的专栏 4400

对于ListViewTextView的数据显示问题

今天在做一个listview

ibelieveyouwxy的专栏 3718

ListView一行显示两个Item并实现单选功能

最终效果如上图所示意 核心代码只要是Adapter里面完成一行显示两个item,并且加入一个回调接口进行返回数据 public class MyAdapter extends BaseAdapter { private List mList; private Context mContext; private int sumCount; private ChangeTextView c

Matrixth的博客 7504
下一篇: 百度地图拖动定位
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值