日常开发中经常会碰到ScrollView嵌套ListView的情况,但两者都有滑动事件,因此会因滑动事件冲突,而引发不能滑动问题;
自定义ListView:重写其中的onMeasure()方法;
因为ScrollView默认把Childview设置为UNSPEFEIED模式,而该模式下的ListView给自己的测量的高度就是第一个item的高度:int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST)如图:
1
该方法的作用是根据大小和模式来生成一个int值,这个int值封装了模式和大小信息
MeasureSpec用int类型表示,前2位代表模式,后30位代表大小. 第一个参数Integer.MAX_VALUE >> 2:Integer.MAX_VALUE,第二个参数MeasureSpec.AT_MOST:表示这个控件适配父控件的最大空间.
当然除了这种方法外,还有别的方法可实现,比如:1:用LinearLayout取代ListView;2:将ListView的高度写死;3:用单个ListView取代ScrollView中所有内容,但个人觉得还是重写onMeasure方法最佳些
网友评论