listview scrollView 滑动冲突 listview 动态设置高度

本文介绍了解决Android应用中ScrollView嵌套ListView时的滑动冲突问题的方法,通过自定义OnTouchListener来控制ScrollView的拦截行为。同时,提供了一个动态计算ListView高度的实用技巧,确保了列表在ScrollView中的完美展示。

自己封装的base里事件,解决冲突
@Override
protected void initEvent() {
    //解决滑动冲突
    homeList.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();

            if (action == MotionEvent.ACTION_DOWN) {
                // 记录点击到mKChartView时候,手指的X坐标
                mLastX = event.getX();
            }
            if (action == MotionEvent.ACTION_MOVE) {
                // 超过x值, 让scrollview休息会
                if (Math.abs(event.getX() - mLastX) > 60f) {

                    scrollview.requestDisallowInterceptTouchEvent(true);
                }
            }
            if (action == MotionEvent.ACTION_UP) {
                // 手势抬起,恢复scrollview  状态
                scrollview.requestDisallowInterceptTouchEvent(false);
            }
            return false;
        }
    });
}

 

 

动态计算设置listview高度(适用于scrollView嵌套listView):

public void setListViewHeight(ListView listView) {
    //获取listView的adapter
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }
    int totalHeight = 0;
    //listAdapter.getCount()返回数据项的数目
    for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }
    // listView.getDividerHeight()获取子项间分隔符占用的高度
    // params.height最后得到整个ListView完整显示需要的高度
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值