计算ListView的高度终极版,考虑到多行textview的情况

ListView嵌套ListView,TextView有多行文本显示不全不问题 这是在网上找到的相关的解决方法,记录下来,方便以后查看。 关于ListView嵌套ListView,在网上找到的解决方法是调用自定义的方法动态计算listview的高度: public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listVie 阅读详情

在一些时候,我们需要计算Listview的情况,一般来说,网上的许多代码都可以完成计算高度,但是如果遇到textview多行的情况,往往发现计算就不准确了,我找了网上一些方案,结合自己的实验,给出一套最终的解决方案,希望对大家有所帮助


        

private int getListviewHeight(ListView pull) {

        ListAdapter listAdapter = pull.getAdapter();
        if (listAdapter == null) {
            return 0;
        }

        DisplayMetrics dm =getResources().getDisplayMetrics();
        int w_screen = dm.widthPixels;

        int totalHeight = 0;
        int listViewWidth = w_screen-dip2px(this,16);                                         //listView在布局时的宽度
        int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth, View.MeasureSpec.AT_MOST);
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, pull);
            listItem.measure(widthSpec, 0);

            int itemHeight = listItem.getMeasuredHeight();
            totalHeight += itemHeight;
        }
        // 减掉底部分割线的高度
        int historyHeight = totalHeight
                + (pull.getDividerHeight() * listAdapter.getCount() - 1);

        return  historyHeight;

    }
其中 dip2px的将dp的数值转化为对应px,实现方法如下:

 public static int dip2px(Context context, float dipValue){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dipValue * scale + 0.5f);
    }

经过笔者验证,无论textview多少行,计算出来的高度是正确的,与网上许多代码不同的地方,就是

listItem.measure(widthSpec, 0);
网上传入的参数基本都是(0,0),这到底有什么区别呢?在实现listview的时候,我们往往不会贴边显示,所以会左右之间留有一定的空间,如果传入的(0,0),然后代码去measure,就会出错,它把你左右的间隙也计算进去了,单行的时候textview还好,如果是多行,错误会非常明显。

这个函数实现传入的第一个参数就是listview中,每一项item的实际宽度,所以上面的代码有一句是

int listViewWidth = w_screen-dip2px(this,16);  


其中16,就是我代码中举例左边的一个padding的宽度,单位为dp,经过转化为px后,用屏幕的宽度,减去左边距,就是该item的实际宽度了,所以得出的值也是正确的


希望该代码对大家有所帮助!



Android:ListView的嵌套和一行显示多个 实现广告位和列表的整体下拉刷新 ListView的两层嵌套 让ListView中的一行显示多个Item 立即下载

相关推荐

ScrollView嵌套ListView及ListView嵌套的高度计算方法

下面小编就为大家分享一篇ScrollView嵌套ListView及ListView嵌套的高度计算方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如何获取listview的内容高度

有时候需要在listview 显示之前获取内容的高度。 可以用 item.measure(0,0); 方式计算大小再获取。 注: item.measure(); 高度默认的参数是wrap_content的情况下和measure(0,0)计算的高度是一样的。 所以简化一下,不去配 heightMeasureSpec的值了,直接用(0,0)参数。 如果要配的话,可以用 MeasureSp

JavaLive09的专栏 2488

RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势

本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。

weixin_29189003的博客 521

具有多行布局的Android Listview

在许多文章中,我们广泛讨论了ListView及其处理方法:创建自定义适配器或处理用户交互。 在本文中,我将介绍过去未涉及的与ListView相关的另一个方面:具有多行布局的ListView。 到现在为止,我们已经看到行具有相同的布局,无论如何,都有可能具有不同的布局。 我们希望拥有如下所示的图片: 在此应用中,我们显示一个联系人列表,该列表具有两种不同的布局,一种使用图像,另...

717

DIY便携式PEMF磁脉冲治疗仪:百元成本自制生物物理疗法设备

脉冲电磁场(PEMF)疗法是一种基于生物物理原理的非侵入性技术,它通过特定频率的电磁脉冲作用于细胞层面,影响细胞膜电位和离子通道活动,从而可能调节细胞代谢与功能。其技术价值在于提供了一种物理干预手段,在健康科技和生物黑客领域被探索用于放松、恢复等场景。实现PEMF的核心是通过信号发生与功率放大驱动电磁线圈产生可控磁场。本文以蓝牙音频模块和智能手机App为切入点,详细解析了如何利用低成本电子元件(如DFRobot XY-WRBT模块和漆包线线圈)构建一个可自定义频率的便携式PEMF设备,涵盖了从电路设计、线圈

weixin_31476015的博客 352

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

ListView 两列多行实现

ListView 两行多列实现 ListView只能添加Layout对象,不能添加Node的非Widget对象 1.使用cocosStudio1.6制作出 ListView 的界面 2.手动向 ListView 中添加内容 3.将要添加的内容也使用 cocosStudio 制作出来 4.然后创建一个新的类用来获取 将要添加的内容 5.创建出来多个 将要添加的内容 6.创建一个coco...

weixin_34216196的博客 1443

YOLOv11 快速入门指南 | 10分钟吃透网络结构与新特性

2024 年 9 月 30 日,Ultralytics 发布了 YOLOv11,这是继 YOLOv8、v9、v10 之后的最新一代实时目标检测模型。 与前几代相比,YOLOv11 在保持“单阶段、实时、端到端”三大基因的同时,带来了两大核心升级:一句话总结:YOLOv11 = 更快 + 更准 + 更少参数。 2.2 微观单元:C3k2 与 C2PSA 2.2.1 C3k2 模块 作用:替换 YOLOv8 的 C2f,做跨阶段局部特征融合。 核心代码(ultralytics/nn/modules/block

shrgegrb的博客 1407

C# ListView用法详解

一、ListView类           1、常用的基本属性:         (1)FullRowSelect:设置是否行选择模式。(默认为false) 提示:只有在Details视图该属性才有意义。         (2) GridLines:设置行和列之间是否显示网格线。(默认为false)提示:只有在Details视图该属性才有意义。         (3)AllowColumn

雾里看花 18万+

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 171

【Claude Code 源码解析教程】第4章:QueryEngine 查询引擎

本章深入解析 Claude Code 的核心引擎——QueryEngine,它是整个对话系统的"心脏",负责管理会话状态、消息处理流程和多轮对话支持。

rengang66的博客 270

Android TextView 高度问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34087503的博客 1236

MFC属性网格控件(CMFCPropertyGridCtrl)完全指南:构建专业属性编辑界面

本文详细介绍了MFC中的CMFCPropertyGridCtrl控件的使用方法。主要内容包括:控件基础用法(初始化、添加属性、事件处理)、高级设置(自定义外观、创建属性类型、动态更新)、派生类实现(自定义绘制、搜索过滤功能)、界面集成技巧(对话框布局、属性编辑器)以及实际应用示例。文章重点讲解了如何通过继承和自定义实现复杂功能,并提供了性能优化、多语言支持等最佳实践方案。该控件适用于需要大量参数配置的应用程序,能够创建类似Visual Studio属性窗口的专业界面。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 155

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

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

myrssq的博客 3100

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

如何动态测量ListView的高度?

网络上已经有很多这方面的文章,甚至完整的代码。 但是,我发现如果ListView的Item布局比较复杂,或者某个View有多行显示时,网上的代码测量出来的高度是错误的。 这里,结合自己的实践以及一些stackOverFlow的参考,进行一下总结。 首先,从网络上的方法开始。 如果你搜索“动态测量ListView的高度”,你会看到很多类似下面的代码 // 动态改变listV

javine的专栏 7142

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

关于ScrollView中嵌套listView,textView存在多行时,listView高度计算不正确。

我们都知道,如果在scrollView中嵌套listView的话需要重新计算listview的高度,否则listView只会显示一行。单对于不少新人来说,还有个问题可能是不知道的。如果在listView的item布局中存在textView,而且textView是多行显示的情况下,就算重新计算listView的高度也不行。此时listView将不能完全显示子view的内容。原因在于计算item高度时

Fling_Pig的博客 1085

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

当ListView显示不全时,除了总体测量外还要测量TextView的高度

好,直接撸代码,这样更明了 1.关于总体测量 当使用ScrollView嵌套ListView的时候,如果不对ListView进行高度的测量,ListView也不知道自己到底有多长,所以ListView会显示不全的,这里先上总体测量ListView的方法(这种测量方式有很多中,这里就上一种了); public void setListViewHeight(ListView list

Nothing 1347

android listview 行高度,Android ListView高度问题

有些页面中ListView只是整个页面的一小部分,需要上下滑动整个页面,ListView不让自己滑动,默认ListView只会显示第一个item。这个时候需要重新设置一下ListView的高度。如果ListView的item中有TextView并且TextView的行数大于1行,这个时候.重设ListView的高度却计算不出TextView的高度,会出现TextView只显示一行的情况。这个时候需...

weixin_39604276的博客 1190

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

如果Listview的Item高度是动态的,例如包含Textview并且超过一行的情况下,如果继续用以上两种方法,那么计算的只是一行TextView的高度 所以这里给了一个很简单的方法,如下: // 动态改变listView的高度  ,解决TextView超过一行,高度只计算一行的问题 public int setListViewHeightBasedOnChildren(ListV

木易匕禾页的博客 967

解决scrollview与listview共存问题 计算listview的宽高(item中有imageview)

前言: 由于在项目中遇到listview与scrollView共存的时候,导致listview无法正常显示,或者说是有时候只显示一条item的情况,在网上查找了好多资料,基本都是 1.重写listview的onmeasure()方法,使listview能适应scrollview的效果 protected void onMeasure(int widthMeasureSpec, int hei

lxj_time的博客 1049

android 获取textview的高度,Android 可直接获取高度的textView

众所周知Android原生的textView在setText()执行之后并不能马上通过getHeight得到当前textView的高度,此时需要使用观察者模式在textView绘制完毕后取得,那么如果需要立即知道此时textView的高度和行数,甚至是要锁定textView的行数并拿到某一行最后一个字符的下标,这时候使用textView就非常的不方便了。如果强行使用观察者模式,在实践中往往需要执行...

weixin_29184371的博客 1526

listview设置计算item的高度 获取listview的高度

由于item中有textview 由于现实的文字长度不同 不能知道item的高度具体值 可以用一下方法计算 /** * 设置最热剧listview的高度 */ private void setListViewHeight() { int totalHeight = 0; for (int i = 0, len = mListviewAdapter.getCount(); i

lifengliou的博客 695

ScrollView嵌套ListView,gridView只显示一行解决方案 (以及计算显示高度错误问题)

今天遇到问题如题:               最后通过网络找到答案,,,主要是ScrollView问题,,,所以贴出来大家一起共同学习.            解决方法1:(代码去计算高度,然后在显示)                      private void setListViewHeightBasedOnChildren(ListView listView) { I

仰视未来的专栏 887

如何正确获得ListView的每一个item高度

如何正确获得ListView的每一个item高度最近Android中使用ListView 需要动态获取每个item的高度 来计算ListView的高度,计算过程中碰到一些问题,特此分享前提 这个item的根view必须是LinearLayoutpackage com.bxg.news.view; import android.view.View; import android.view.ViewGr

HaiZhiXinShan的专栏 7705
上一篇: Tensorflow入门教程【1】---Hello TensorFlow
下一篇: Android 下隐藏虚拟导航栏的方法,不需要root,需要的时候调出,弹dialog不会闪现
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值