📅  最后修改于: 2023-12-03 14:59:17.033000             🧑  作者: Mango
在开发Android应用时,我们经常会使用NestedScrollView
来实现滚动的效果。而当有一些操作按钮需要在滚动页面时自动隐藏或自动扩展的时候,我们需要用到FloatingActionButton
。本文将介绍如何在NestedScrollView
中实现自动隐藏或自动扩展的FloatingActionButton
。
首先介绍一种自动隐藏的实现方式,我们可以定义一个名为AutoHideFloatingActionButton
的类,继承自FloatingActionButton
,并实现OnScrollChangeListener
接口。这个类的作用就是在NestedScrollView
滚动时,判断FloatingActionButton
是否需要显示或隐藏。
public class AutoHideFloatingActionButton extends FloatingActionButton implements NestedScrollView.OnScrollChangeListener {
public AutoHideFloatingActionButton(Context context) {
super(context);
}
public AutoHideFloatingActionButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AutoHideFloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY > oldScrollY && isShown()) {
hide();
}
if (scrollY < oldScrollY && !isShown()) {
show();
}
}
}
使用时,在布局文件中添加AutoHideFloatingActionButton
即可:
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- NestedScrollView的内容 -->
<com.example.AutoHideFloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end" />
</android.support.v4.widget.NestedScrollView>
接下来介绍另一种自动扩展的实现方式,我们同样可以定义一个名为AutoExpandFloatingActionButton
的类,继承自FloatingActionButton
,并实现OnScrollChangeListener
接口。这个类的作用就是在NestedScrollView
滚动时,根据滚动距离来修改FloatingActionButton
的大小。
public class AutoExpandFloatingActionButton extends FloatingActionButton implements NestedScrollView.OnScrollChangeListener {
public AutoExpandFloatingActionButton(Context context) {
super(context);
}
public AutoExpandFloatingActionButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AutoExpandFloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int dx = scrollX - oldScrollX;
int dy = scrollY - oldScrollY;
// 修改FloatingActionButton的大小
int size = getSize() + dy;
setSize(size < MIN_SIZE ? MIN_SIZE : size);
}
private static final int MIN_SIZE = 56;
}
使用时,在布局文件中添加AutoExpandFloatingActionButton
即可:
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- NestedScrollView的内容 -->
<com.example.AutoExpandFloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:maxSize="96dp" />
</android.support.v4.widget.NestedScrollView>
这里可以使用app:maxSize
属性来设置FloatingActionButton
的最大大小,避免过度扩展。
至此,我们介绍了两种在NestedScrollView
中实现自动隐藏或自动扩展的FloatingActionButton
的方式。可以根据业务需求选择其中之一或两个结合使用。