PopupMenu hace clic para que RecyclerView se desplace

Tengo un botón de desbordamiento dentro de un CardView en Recyclerview . Cada vez que estoy haciendo clic en el botón, muestro un menú emergente, pero también RecyclerView está desplazando hacia abajo un elemento. ¿Puede alguien por favor ayudarme a detener este desplazamiento no deseado?

Básicamente estoy intentando replicar el mismo comportamiento del botón del desbordamiento que en Playstore.

Diseño:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="5dp"> <android.support.v7.widget.CardView android:id="@+id/cv_tracks" android:layout_width="match_parent" android:layout_height="65dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="60dp"> <ImageView android:id="@+id/ivTracks" android:layout_width="60dp" android:layout_height="60dp" android:background="@drawable/unknown" /> <Button android:id="@+id/imgbtn_overflow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:drawableTop="@drawable/ic_overflow" android:paddingLeft="25dp" android:paddingRight="20dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> </RelativeLayout> </android.support.v7.widget.CardView> </RelativeLayout> 

Adaptador:

 @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 } }); } 

UPDATE: Tengo el problema. Cuando se muestra el menú emergente, se desliza la lista hacia abajo para mostrar el menú desplegable completo. ¿Cómo ajustar popup para mostrar hacia arriba / abajo dependiendo del espacio disponible?

Intenté usar android.widget.PopupMenu en lugar de android.support.v7.widget.PopupMenu y Voila, funciona. Así que es un error en la biblioteca de soporte. ¿Pueden los grandes desarrolladores de aquí confirmar lo mismo?

Puede tener su anchorView anular requestRectangleOnScreen requestRectangleOnScreen() y devolver false. Esto evitará que cualquier ScrollView de origen se desplace.

Por lo tanto, en su caso, imgBtnOverflow sería un ImageButton personalizado, así:

 /** * 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 )

Se ha presentado un problema contra el PopupMenu de asistencia técnica aquí: https://code.google.com/p/android/issues/detail?id=135439

requestRectangleOnScreen no funciona para mí, en mi caso, requestRectangleOnScreen no se llama, cuando se muestra popupMenu. Mi solución es override requestChildRectangleOnScreen , y reture false, funcionan bien.

 public class PopupAncorRecyclerViewPager extends RecyclerView { @Override public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) { return false; } } 
  • Cómo obtener la posición de un elemento de un PopupMenu en un ListView personalizado
  • Android: Uso de PopupMenu en el nivel 9 de API
  • Establecer el menú emergente a pantalla completa
  • La mejor manera de crear menú desplegable en android 2.x como en ICS
  • PopupMenu no se encuentra correctamente dentro de RecyclerView
  • Menú emergente personalizado de Android con conmutador
  • Ocultar el elemento de popupmenu
  • Se ha intentado finalizar un evento de entrada pero el receptor de eventos de entrada ya se ha eliminado
  • ¿Cómo puedo arreglar NoClassDefFoundError en Android para android.widget.PopupMenu?
  • Android PopupWindow se oculta detrás de los botones de navegación en Nexus 5
  • Implementar menú emergente con margen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.