PopupMenu click causing RecyclerView to scroll

后端 未结 4 1584
温柔的废话
温柔的废话 2021-02-19 16:33

I have an overflow button inside a CardView in Recyclerview. Whenever I am clicking the button,I show a popup menu but also RecyclerView i

相关标签:
4条回答
  • 2021-02-19 17:22

    Tried using android.widget.PopupMenu instead of android.support.v7.widget.PopupMenu and Voila, it works. So is it a bug in Support library. Can great developers out here confirm the same?

    0 讨论(0)
  • 2021-02-19 17:26

    requestRectangleOnScreennot work for me, in my case, requestRectangleOnScreennot called, when show popupMenu. my solution is override requestChildRectangleOnScreen, and reture false, work well.

    public class PopupAncorRecyclerViewPager extends RecyclerView {
            @Override
        public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
            return false;
        }
    }
    
    0 讨论(0)
  • 2021-02-19 17:31

    You can have your AnchorView override requestRectangleOnScreen() and return false. This will prevent any parent ScrollView from scrolling.

    So, in your case, imgBtnOverflow would be a custom ImageButton, like so:

    /**
     * A custom {@link ImageButton} which prevents parent ScrollView scrolling when used as the
     * anchor for a {@link android.support.v7.widget.PopupMenu}
     */
    public class NonScrollImageButton extends ImageButton {
    
        public NonScrollImageButton(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public boolean requestRectangleOnScreen(Rect rectangle, boolean immediate) {
            return false;
        }
    }
    

    Props to jankovd (https://gist.github.com/jankovd/19ef35efd1f00e9213fa)

    An issue has been filed against the Support PopupMenu here: https://code.google.com/p/android/issues/detail?id=135439

    0 讨论(0)
  • 2021-02-19 17:34

    I have same problem, and I use this way:

    mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false) {
                @Override
                public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate) {
                    return false;
                }
            };
    mRecyclerView.setLayoutManager(mLayoutManager);
    

    RecyclerView user layoutmanager to manage layout, so I think change layoutmanger behaver is the bettor solution.

    0 讨论(0)
提交回复
热议问题