提问者:小点点

浮动操作按钮在列表滚动时隐藏


我正在使用< code > Android . support . design . widget 包中的< code > floating action button :

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_marginBottom="20dp"
    android:layout_marginEnd="16dp"
    android:clickable="true"
    android:backgroundTint="@color/primaryColor"
    android:src="@drawable/ic_search_white_24dp"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:backgroundTint="@color/primaryColorDark"
    app:rippleColor="@color/accentColor" />

是否可以将该按钮配置为在列表视图向下滚动时使用动画隐藏,并在列表视图向上滚动到顶部时再次显示它?


共3个答案

匿名用户

那些希望使用recyclerview的人可以这样做:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        if (dy > 0 || dy < 0 && fab.isShown())
            fab.hide();
    }

    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE)
            fab.show();
        super.onScrollStateChanged(recyclerView, newState);
    }
});

匿名用户

不好意思!我迟到了多年才回答这个问题。我希望这仍然可以帮助某人。这也是我的第一个答案。

伙计们!无需实现滚动侦听器。

将以下内容添加到浮动操作按钮 xml 中:

app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"

给予:

<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
        android:id="@+id/fabAddOItransferIn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:text="@string/btn_text_transfer_in"
        app:icon="@android:drawable/ic_input_add"
        app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

作为对我以下评论的回应,“对不起!我刚刚注意到这有一个奇怪的副作用。如果添加了app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior,任何快照栏都会重叠这个浮动操作按钮。☹️去掉这一行将防止重叠,浮动操作按钮将按照它在协调器布局中的预期行为。”

要解决此问题,请使用以下命令:

Snackbar.make(floating_action_button, "Some snackbar text!", BaseTransientBottomBar.LENGTH_SHORT).setAnchorView(floating_action_button).show();

匿名用户

Irfan Raza代码的一个小改进:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy){
            if (dy<0 && !fab.isShown())
                fab.show();
            else if(dy>0 && fab.isShown())
                fab.hide();
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }
    });

浮动操作按钮向下滚动时隐藏,向上滚动时显示。