Android Scroll 中嵌套ListView
16lz
2021-01-23
Android Scroll 中嵌套ListView
public class ExpListView extends ListView{
public ExpTwoWayView(Context context) {
super(context);
}
public ExpTwoWayView(Context context, AttributeSet attrs) {
super(context, attrs);
}
在Scroll中嵌套ListView,一般会出现了、ListView的item只显示一个的情况,出现这种情况,如果想让ListView显示正常,一种方法是设置ListView
的高度,比如300dp,另一种方法就是重写ListView的onMeasure方法,如下。但是重写该方法也有问题。就是写成这样,会将ListView的所有Item都显示出来,
如果ListView 有10个Item,那就显示十行,如果有1000个item,那就显示1000行,整个界面完全变形了。同时重写了这个方法,ListView就不会有滚动效果了。每次
滑动屏幕的时候,滚动的是外面的Scroll。如果想在滑动屏幕的时候,我滑动ListView,Scroll不滑动,那就要重写ListView 的onInterceptTouchEvent和onTouchEvent方法。
如下所示,同时把onMeasure方法注释掉。
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(expandSpec, heightMeasureSpec);
}
写成这样的话,在滑动ListView的时候,外面的Scroll就不会滑动了。但是也有一个问题,就是当ListView滑动到开始或者末尾的时候,在滑动ListView, Scroll
仍然接受不到滑动事件。只有滑动Scroll的时候,Scroll才会有相应。呵呵,非常高深的一个问题。。。。。。
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean ret = super.onInterceptTouchEvent(ev);
Log.i("----->", " onInterceptTouchEvent ret = " + ret);
if (ret) {
getParent().requestDisallowInterceptTouchEvent(true);
}
return ret;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean ret = super.onTouchEvent(ev);
Log.i("----->", " onTouchEvent ret = " + ret);
if (ret) {
getParent().requestDisallowInterceptTouchEvent(true);
}
return ret;
}
}
更多相关文章
- 使用反射获取Android中隐藏的方法
- android 按钮效果的两种实现方法
- Android设置桌面背景图片的方法
- [置顶] 找到一个在Android上创建阻塞式模态对话框的方法
- Android来电拦截的实现方法
- Android Studio集成Library时报错,终极解决方法
- Android从服务器获取图片的实例方法
- android屏幕休眠和唤醒两种方法(newWakeLock)
- android添加图片到本地,无法即使刷新的解决方法