android menu滚动,PopupMenu单击导致RecyclerView滚动

我在Recyclerview的CardView中有一个溢出按钮。 每当我点击按钮时,我会显示一个popup菜单,但RecyclerView也会向下滚动一个项目。 任何人都可以帮我阻止这种不必要的滚动吗?

基本上我试图复制与Playstore中相同的溢出按钮行为。

布局:

适配器:

@Override public void onBindViewHolder(final TracksViewHolder tracksViewHolder, int i) { tracksViewHolder.imgBtnOverflow.setTag(i); tracksViewHolder.imgBtnOverflow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Creating the instance of PopupMenu final int position = (Integer) v.getTag(); PopupMenu popup = new PopupMenu(mContext,tracksViewHolder.imgBtnOverflow); //Inflating the Popup using xml file popup.getMenuInflater() .inflate(R.menu.popup_menu_overflow, popup.getMenu()); //registering popup with OnMenuItemClickListener popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { if(mPopUpClick!=null) mPopUpClick.actionOnPopUpItemClick(position,item,songs.get(position)); return true; } }); popup.show(); //showing popup menu } }); }

更新:遇到问题。当popup菜单显示时,它会向下滑动列表以显示整个下拉列表。 如何调整popup窗口以根据可用空间显示上/下?

尝试使用android.widget.PopupMenu而不是android.support.v7.widget.PopupMenu和Voila,它的工作原理。 这是支持库中的一个错误。 伟大的开发人员可以在这里确认一样吗?

您可以让您的AnchorView覆盖requestRectangleOnScreen()并返回false。 这将阻止任何父ScrollView滚动。

因此,在您的情况下, imgBtnOverflow将是一个自定义ImageButton ,如下所示:

/** * 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; } }

此处针对支持PopupMenu提出了一个问题: https : //code.google.com/p/android/issues/detail? id = 135439

我有同样的问题,我用这种方式:

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用户layoutmanager来管理布局,所以我认为更改layoutmanger行为是bettor解决方案。

requestRectangleOnScreen不适用于我,在我的情况下,当show popupMenu没有调用requestRectangleOnScreen 。 我的解决方案是覆盖requestChildRectangleOnScreen ,并且返回false,运行良好。

public class PopupAncorRecyclerViewPager extends RecyclerView { @Override public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) { return false; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值