📌  相关文章
📜  Android中NestedScrollView的自动隐藏或自动扩展浮动操作按钮(1)

📅  最后修改于: 2023-12-03 14:59:17.033000             🧑  作者: Mango

Android中NestedScrollView的自动隐藏或自动扩展浮动操作按钮

在开发Android应用时,我们经常会使用NestedScrollView来实现滚动的效果。而当有一些操作按钮需要在滚动页面时自动隐藏或自动扩展的时候,我们需要用到FloatingActionButton。本文将介绍如何在NestedScrollView中实现自动隐藏或自动扩展的FloatingActionButton

AutoHideFloatingActionButton

首先介绍一种自动隐藏的实现方式,我们可以定义一个名为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

接下来介绍另一种自动扩展的实现方式,我们同样可以定义一个名为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的方式。可以根据业务需求选择其中之一或两个结合使用。