一、AppbarLayout摺疊
Android Material Design提供了名為AppBarLayout的布局組件,它是為了實現類似Toolbar的透明與伸縮效果。
首先,我們需要在xml中定義一個AppBarLayout布局,然後再在其中添加Toolbar。
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
接下來,我們需要在java代碼中對AppBarLayout進行操作:
AppBarLayout appbarLayout = findViewById(R.id.appbar_layout);
appbarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
// Implement your logic here
}
});
addOnOffsetChangedListener監聽方法會在AppBarLayout進行摺疊時進行回調,其中參數verticalOffset表示當前AppBarLayout的高度。
二、AppbarLayout嵌套RecyclerView
AppbarLayout常常與RecyclerView一起使用,實現可伸縮的布局。需要使用CoordinatorLayout來實現。代碼如下:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary" />
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
注意,在RecyclerView中需要添加appbar_scrolling_view_behavior屬性
三、AppbarLayout OnNestedPreScroll
AppbarLayout有一個OnNestedPreScroll監聽方法,在嵌套滑動事件中觸發。可以通過該方法來監聽嵌套滑動事件,進行個性化的處理,例如實現頭部高度放大效果。
appbarLayout.addOnOffsetChangedListener(
new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout,
int verticalOffset) {
recyclerView.setPadding(0, -verticalOffset, 0, 0);
}
});
上述代碼實現了隨着AppBarLayout的摺疊,RecyclerView的padding也會發生改變。
四、AppbarLayout禁止摺疊
有時候,我們可能希望AppbarLayout不能被摺疊。這可以通過在AppBarLayout中添加 app:layout_scrollFlags="scroll"
屬性來實現。
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
app:layout_scrollFlags="scroll">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@drawable/shape_test"
app:layout_scrollFlags="scroll"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>
上面代碼中,設置了AppBarLayout不被摺疊的屬性,Toolbar也被設置為不可摺疊,防止和AppBarLayout發生衝突。
五、AppbarLayout禁止滑動
如果我們不想讓AppbarLayout隨着底部View的滑動而滑動,可以為底部View設置 app:layout_behavior="@null"
。
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@null" />
這段代碼在RecyclerView中設置了app:layout_behavior=”@null”,使得RecyclerView下滑時AppBarLayout不再跟隨滑動,固定在頂部。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237213.html