当前位置: 首页 > >

CoordinatorLayout+AppBarLayout 布局方式下的一键滚动到顶部的实现

发布时间:

首先是布局


CoordinatorLayout嵌套AppBarLayout,滚动的头部都应该放在AppBarLayout里面,并使用app:layout_scrollFlags="scroll",
下面跟随滚动的使用app:layout_behavior="@string/appbar_scrolling_view_behavior"


代码如下:


android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title_bar">

android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/gray_bg"
android:elevation="@dimen/dp_0"
app:elevation="0dp">

android:id="@+id/headerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_4"
app:layout_scrollFlags="scroll">

android:layout_width="match_parent"
android:layout_height="wrap_content">

android:id="@+id/no_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/dp_148"
android:orientation="horizontal" />

android:id="@+id/live_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_278"
android:orientation="vertical"
android:visibility="gone"
app:layout_scrollFlags="scroll">

android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:background="@color/white"
android:orientation="horizontal">

android:id="@+id/iv_cz_logo"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_8"
android:src="@mipmap/ic_cz_gd_115" />

android:id="@+id/tv_live_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="天津时时彩开奖视频"
android:textColor="@color/black"
android:textSize="@dimen/sp_18"
android:textStyle="bold" />

android:id="@+id/iv_close_live"
android:layout_width="@dimen/dp_48"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:padding="@dimen/dp_15"
android:src="@mipmap/ic_black_close" />


android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_scrollFlags="scroll">

android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white" />

android:id="@+id/webViewProgress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_2"
android:max="100"
android:progress="5"
android:progressDrawable="@drawable/layer_progress_red" />

android:id="@+id/tv_network_error_hint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:gravity="center"
android:text="网络异常,点击重试"
android:textColor="@color/color_gray"
android:textSize="@dimen/dp_24"
android:visibility="visible" />

android:id="@+id/iv_live_cover"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/ic_live_cover_cqssc"
android:scaleType="fitXY"/>






android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />


下面说如何一键滚动回到顶部


public void scrollToTop() {
//拿到 appbar 的 behavior,让 appbar 滚动
ViewGroup.LayoutParams layoutParams = appBarLayout.getLayoutParams();
CoordinatorLayout.Behavior behavior =
((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
if (behavior instanceof AppBarLayout.Behavior) {
AppBarLayout.Behavior appBarLayoutBehavior = (AppBarLayout.Behavior) behavior;
//拿到下方tabs的y坐标,即为我要的偏移量
float y = noContainer.getY();
//注意传递负值
appBarLayoutBehavior.setTopAndBottomOffset((int) -y);
}
}

//监听滚动


appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
iv_scroll_to_top.setVisibility(View.VISIBLE);
} else {
iv_scroll_to_top.setVisibility(View.GONE);
}
}
});

?


?


?



友情链接: