android - CoordinatorLayout中再嵌套CoordinatorLayout滑动冲突怎么解决?
迷茫
迷茫 2017-04-18 09:13:55
[Android讨论组]

我的问题是在CoordinatorLayout中再嵌套一个CoordinatorLayout,两个都有自定义Behavior并都重写onStartNestedScroll的时候,只能监听到子CoordinatorLayout的滑动,也就是只执行了子CoordinatorLayout的自定义Behavior。

我的主布局是CoordinatorLayout,之中嵌套了一个ViewPager,以及toolbar和底部tab
在ViewPager的第一个Fragment中有一个RecyclerView和一个在此列表之上的一个LinerLayout
现在我利用自定义Behavior已经实现下滑动列表的时候,toolbar和底部tab都消失到屏幕外,上滑的时候回来
而我的第一个Fragment之中,那个LinerLayout也想利用Behavior来监听列表滑动并减小自己的高度,
因为CoordinatorLayout的自定义Behavior只能对直接子View有效,所以我想将Fragment的主布局设置为coordinatorlayout
现在问题来了,自定义Behavior的onStartNestedScroll函数返回true的时候,toolbar和底部tab就检测不到滑动了

目前尝试的方法有

将该LinerLayout包裹在AppBarLayout中,并设置RecyclerView的Behavior为appbar_scrolling_view_behavior
结果是toolbar和Tab都不会隐藏了

自己定义Behavior,重写onStartNestedScroll函数并返回true后,外部toolbar和Tab都不会隐藏了

主布局的Behavior,可以隐藏和显示tab

    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
        if (child.getVisibility() == View.VISIBLE && viewY == 0) {
            viewY = coordinatorLayout.getHeight() - child.getY();
        }
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;//判断是否竖直滚动
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
        if (dy >=0&&!isAnimate&&child.getVisibility()==View.VISIBLE) {
            //隐藏的动画
        } else if (dy <0&&!isAnimate&&child.getVisibility()==View.GONE) {
            //显示动画
        }
    }

ViewPager中首个Fragment的布局自定义Behavior
测试的时候仅仅只将onStartNestedScroll函数返回true就发现外部的toolbar和tab都不会隐藏了

不知是不是因为CoordinatorLayout不能嵌套,还是我应该在子CoordinatorLayout在进行一次判断?该如何判断呢?
还是说要实现这种效果,就不能考虑两个CoordinatorLayout嵌套?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
巴扎黑

你把Behavior写在你主布局的ViewPager中就行了

ringa_lee

CoordinatorLayout一个足够。如果你的需求要嵌套,那你就是没有深入探索CoordinatorLayout

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号