簡體   English   中英

當列表無法滾動時,隱藏浮動操作按鈕

[英]Hide Floating Action Button when list can't be scrollable

我在Android項目中使用了Floating Action Button,並通過在Recyclerview上實現OnScrollListener來隱藏列表滾動到底部時顯示的內容,以及滾動到頂部時顯示的內容。

 @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        boolean isSignificantDelta = Math.abs(dy) > mScrollThreshold;
        if (isSignificantDelta) {
            if (dy > 0) {
                onScrollUp();
            } else {
                onScrollDown();
            }
        }
    }

現在,當我的列表不可滾動時,我想隱藏該晶圓廠,因為我的最后一個元素是完全可見的。

當我的列表為空或包含很少的項目並且由於滾動條的大小而無法滾動時,不會調用Scrolled的方法。

您是否有調用此方法的提示,因為這似乎是我執行我想做的事情的解決方案?

檢查下面的代碼

public abstract class HideShowScrollListener extends RecyclerView.OnScrollListener {

private static final int HIDE_THRESHOLD = 20;
private int scrolledDistance = 0;
private boolean controlsVisible = true;

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);

    if (scrolledDistance > HIDE_THRESHOLD && controlsVisible) {
        onHide();
        controlsVisible = false;
        scrolledDistance = 0;
    } else if (scrolledDistance < -HIDE_THRESHOLD && !controlsVisible) {
        onShow();
        controlsVisible = true;
        scrolledDistance = 0;
    }

    if ((controlsVisible && dy > 0) || (!controlsVisible && dy < 0)) {
        scrolledDistance += dy;
    }
}

public abstract void onHide();

public abstract void onShow();
}

在您的活動中,定義以下代碼,其中floatAdd是浮動按鈕。

recyclerView.addOnScrollListener(new HideShowScrollListener() {
        @Override
        public void onHide() {
            floatingAdd.animate().setInterpolator(new AccelerateDecelerateInterpolator()).scaleX(0).scaleY(0);
        }

        @Override
        public void onShow() {
            floatingAdd.animate().setInterpolator(new AccelerateDecelerateInterpolator()).scaleX(1).scaleY(1);
        }
    });

這似乎不是正確的方法,但是我沒有找到更好的解決方案。

getItemCount方法中,我返回array.size()+2因此回收站視圖又創建了兩個項目(對我來說這是正確的數量,您可能需要另一個數字)。 onCreateViewHolder方法中,我檢查應在哪個位置創建視圖。 而且,如果它超出了我的項目范圍,則只禁用其中的所有小部件(按鈕,editTexts等),並將其可見性設置為不可見(因為我需要它占用一些空間,所以不可見)。 我還具有回調onItemMove ,當用戶通過拖動對項目重新排序時會調用它。 在里面,我檢查新位置是否不在數組的范圍內。 當然,最后兩項禁用拖動。

正如我所說,這是一種解決方法,但非常簡單。 而且我沒有注意到它的任何缺點。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM