如题,项目中有一个需求,就是 CoordinatorLayout 嵌套的布局下,点击下方的 Tab,切换,并展示整屏。
如上图:点击下方的 视频、文章的时候,顶部自动向上滑动,展示全屏,请看效果图
那么这个怎么做呢?
其实关键的代码逻辑是CoordinatorLayout.Behavior
中setTopAndBottomOffset()
方法
首先这个方法位于
所以要执行这个方法,必须保证 当前操作的 view 的父容器是 CoordinatorLayout
我们来看一下这个方法官网的介绍
是不是白看,哈哈,其实看名字大概知道一二了,就是通过这个方法去设置顶部的偏移量。
不过需要注意的是,这里设置的值不是滚动量,而是偏移量,我们想让控件往上滚,说明要传入一个负值。
提供一下我的方法
public void scrollToTop(){
//拿到 appbar 的 behavior,让 appbar 滚动
ViewGroup.LayoutParams layoutParams = binding.appbar.getLayoutParams();
CoordinatorLayout.Behavior behavior =
((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
if (behavior instanceof AppBarLayout.Behavior) {
AppBarLayout.Behavior appBarLayoutBehavior = (AppBarLayout.Behavior) behavior;
//拿到下方tabs的y坐标,即为我要的偏移量
float y = binding.tabs.getY();
//注意传递负值
appBarLayoutBehavior.setTopAndBottomOffset((int) -y);
}
}
然后将此方法,放置于 切换 Tab 的监听中,即能实现上方流程。
网友评论