ScrollView镶嵌listview显示不全的原因
当ScrollView镶嵌listview会显示不全,通过查看ScrollView测量高度的源码,会发现ScrollView重写了父类viewGroup的measureChildWithMargins方法:
测量child的高度,传递的是UNSPECIFIED(尽可能大的)
再来看看listview自身onMeasure的测量高度方法:
final int heightMode = MeasureSpec.getMode(heightMeasureSpec),heightMeasureSpec是父容器传过来的;
当测量方式为UNSPECIFIED时,高度=top+bottom+一个childHeight+两个边框长度。
就会出现listview显示不全。
解决方法:
自定义一个listview,重写listview的onMeasure方法:
看看makeMeasureSpec方法
将测量方式改为AT_MOST,那为什么我们又要给个最大值呢,跟着方法走:
会发现listview在测量child时有个这个方法,设最大值是为了跳过这个方法,我们只需要测量child高度累加就行了。
那为啥又要位移两位呢?下面代表个人看法:
listview获取高度是这样算的:
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
heightMeasureSpec是
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
传过来的。makeMeasureSpec方法 return (size & ~MODE_MASK) | (mode & MODE_MASK)拼接的,我们再看看AT_MOST:
public static final int AT_MOST = 2 << MODE_SHIFT;
所有个人认为右移两位使heightSize刚好为Integer.MAX_VALUE。
ScrollView镶嵌listview显示不全的原因的更多相关文章
- android listView多层嵌套listView显示不全问题
最近在做项目,需要用到listVIew多层嵌套listVIew的需求,先发现已下两个处理办法比较好用 第一种: public class ListViewNesting extends ListVie ...
- 解决ScrollView中包含ListView,导致ListView显示不全
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
- ScrollView嵌套ListView显示不完全、嵌套TextView不能滚动解决办法
目录: 一.情景说明 二.最初做法 三.解决办法 一.情景说明 1.情景 最近项目刚好有一个需求,需要在一个界面中用ScrollView嵌套一个滚动的TextView和一个listView ...
- DEDECMS文章标题显示不全的原因以及解决方法
首先这里说一下编码问题:UTF-8与GBK(通常为GB2312). GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准):GBK编码专门用来解决中文编码的,是双字节的 ...
- ScrollView嵌套listview显示一行bug
首先看看修复bug之后的显示对比图,结果一目了然 显示一行之前 修改bug之后 主要就是ScrollView嵌套listview显示计算 直接上代码 一目了然 <com.wechaotou ...
- android scrollview listview显示不全
原来处理方法是重写ListView import android.content.Context; import android.util.AttributeSet; import android.v ...
- Android 关于listView 显示不全的问题
刚刚在项目中发现一个bug,我是用ScrollView 嵌套 ListView的,但是我的数据只能显示一条,开始我还以为是数据有错误,经过排查以后发现是正确的 百度发现 android的架构好像没有考 ...
- ScrollView嵌套Linearlayout显示不全的解决办法
以为ScrollView只能嵌套一个元素,所以把几个控件都包裹在了一个LinearLayout中了.但是发现底部显示不全,滑动不到最底下. 代码: <ScrollView android:id= ...
- Eclipse Maven构建WebApp项目资源目录显示不全的原因与解决方式
一.问题展示 1.Eclipse在使用Maven构建WebApp项目的时候,首先Maven的安装和配置都没有问题的,但是构建项目之后,Maven项目要求的几个必须要有的资源目录显示不了: 问题如下图: ...
随机推荐
- 获取3个月前的时间(获取某一天的时间 NSDate) --NSCalendar--NSDateComponents
-(void)getThreeMonthDate:(NSDate *)mydate { NSLog(@"%@",mydate); //1.创建NSCalendar NSCalend ...
- Redis学习笔记(2)—— Redis的安装和使用
一.CentOS安装Redis 1.1 安装环境 redis是C语言开发的,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境.如果没有gcc环境,需要安装gcc: yum instal ...
- java 获取 正在执行的方法名
//获取调用该方法的方法名.... String method = Thread.currentThread().getStackTrace()[2].getMethodName(); //获取正在执 ...
- 主席树的各类模板(区间第k大数【动,静】,区间不同数的个数,区间<=k的个数)
取板粗 好东西来的 1.(HDOJ2665)http://acm.hdu.edu.cn/showproblem.php?pid=2665 (POJ2104)http://poj.org/probl ...
- Hibernate JPA 如何使用SQL文直接查询
对于复杂SQL,可以直接调用native sql来是实现 public List<Partner> findPartners() { List<Partner> partner ...
- sql函数将1,2,3转换为表
/****** Object: UserDefinedFunction [dbo].[splitstring_to_table] Script Date: 2017/7/11 9:35:58 **** ...
- 2048小游戏(Java)(swing实现)(一)
自己写的2048小游戏,仅支持鼠标操作 主要是我不知道怎么添加键盘监听 import javax.swing.*; import java.awt.*; import java.awt.event.* ...
- SQL Server外部链接时报错:Error locating serverInstance specified
SQL Server外部链接时报错:Error locating server/Instance specified 连接时报错信息: 08001 sql server network interfa ...
- 如何 安装Yii2的高级应用程序模板
参考 https://blog.csdn.net/youngqj/article/details/46689051
- 27-----BBS论坛
BBS论坛(二十七) 27.首页帖子列表布局完成 (1)apps/models.py 把帖子跟用户关联起来 class PostModel(db.Model): __tablename__ = 'po ...