listview在scrollview中自行滑动(滑动冲突)

我的scrollview里面的元素较多,不想直接在scrollview里面全部显示出listview,太占界面大小了,要不然我得滑倒天荒地老才能看见listview下面的控件啊!我只想在高度限制的一块区域显示(自定义xml中高度dip,或代码设置几条item的高度文章1、2都有实现),用户想滑那就让他自己滑listview去,想看下面的元素就滑动scrollview。

可有个问题,系统怎么判断我是滑动的listview还是scrollview呢(listview在scrollview里啊)?系统默认是将滑动事件交给scrollview处理,因为scrollview和listview都是可滑动的,而scrollview是父view,会拦截滑动事件自己实现。

这时候就要重写listview了,在它的dispatchTouchEvent方法里面将父view(这里就是scrollview)的InterceptTouchEvent给设置为false,就是不让父view去拦截触摸事件,直接交给子view(就是listview)处理,这样我们滑动的时候系统就认为我们是滑动listview而不是scrollview了(也就实现在限制的区域内滑动listview,不然的话会直接滑倒下面的控件,listview只显示前几条)

 

在实现中需注意,如果listview的一部分在scrollview可显示区域的最下方时(就是说上面的元素把listview的一部分或全部“挤出屏幕”),如图:(待补充);

或许你可以通过滑动上面的元素将listview显示区域的下边界露出来,因为这时的情况只能是listview显示区域小于scrollview在屏幕中占的位置,一旦listview显示高度大于scrollview在手机界面中占有的高度时,如图:(待补充);就只能一直滑动listview了(界面中最下方的区域一直是listview的范围,没办法滑倒下一个控件了),如图:(待补充);

有一个解决方法是将listview的宽度设置小于scrollview的宽度,那么你滑动listview“以外”左右两边的scrollview“竖条区域”就可以了,我在掘金的帖子详情里面看到这种效果了(不过控件不是我们说的这两个)

 

 

package com.anbang.worksharing.ABForm.ui;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

public class CustomListView extends ListView {

public CustomListView(Context context) {
super(context);
}

public CustomListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的单击事件我自行处理,不要阻碍我。
return super.dispatchTouchEvent(ev);
}

// @Override
// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// //MeasureSpec.AT_MOST的意思就是wrap_content
// //Integer.MAX_VALUE >> 2 是使用最大值的意思,也就表示的无边界模式
// //Integer.MAX_VALUE >> 2 此处表示是福布局能够给他提供的大小
// int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
// MeasureSpec.AT_MOST);
// super.onMeasure(widthMeasureSpec, expandSpec);
// }
}
posted @ 2018-01-08 10:06  飞晨信息  阅读(307)  评论(0)    收藏  举报