Implementar menú emergente con margen

Estoy usando el menú pop por defecto y espero el comportamiento de la misma. Todo está funcionando bien. Lo que mi preocupación es con respecto a la prestación de pop-up menú. Mi menú emergente se pega a la derecha de la pantalla.

Quiero que el comportamiento utilizado por Youtube app para android. Introduzca aquí la descripción de la imagen

Principalmente no soy capaz de proporcionar el margen derecho a mi menú emergente. Por favor ayuda. He intentado proporcionar gravedad a menú PopUp. Pero el menú emergente se pega a la derecha de la pantalla.

PopupMenu popupMenu = new PopupMenu(mContext, anchor, Gravity.LEFT); popupMenu.getMenuInflater().inflate(R.menu.menu_edit_accessory, popupMenu.getMenu()); 

Puedes cambiar la posición de tu PopupMenu usando los siguientes atributos: gravity , dropDownHorizontalOffset y dropDownVerticalOffset

Primero ajuste la gravedad a Gravity.END

 popup.setGravity(Gravity.END); 

Luego cambia tus dropdown-offsets creando un estilo

 <style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu"> <item name="android:dropDownHorizontalOffset">-4dp</item> <item name="android:dropDownVerticalOffset">4dp</item> </style> 

Si desea superponer la vista ancla, utilice

 parent="@style/Widget.AppCompat.PopupMenu.Overflow" 

Por último, aplique MyPopupMenu a su tema

 <item name="popupMenuStyle">@style/MyPopupMenu</item> 

Esto es un poco tarde, pero espero que esto ayude a alguien.

Yo estaba tratando de hacer lo que estaba haciendo con un PopupMenu pero nada funcionaba para mí hasta que me enteré de ListPopupWindow . Es una alternativa mejor. Mucho más flexible en mi opinión y usted puede alcanzar el margen-espaciamiento que usted preguntaba alrededor.

Aquí está el código:

 public class MainActivity extends AppCompatActivity { private ImageButton mMoreOptionsButton; private ArrayAdapter<String> mPopupAdapter; private ArrayList<String> mOptionsArray = new ArrayList<>(Arrays.asList("Option1", "Option2", "Option3")); private ListPopupWindow mPopupWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMoreOptionsButton = (ImageButton) view.findViewById(R.id.more_options_button); setupPopupWindow(); } private void setupPopupWindow() { mPopupAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, mOptionsArray); mPopupWindow = new ListPopupWindow(MainActivity.this); mPopupWindow.setAdapter(mPopupAdapter); mPopupWindow.setAnchorView(mMoreOptionsButton); mPopupWindow.setWidth(500); mPopupWindow.setHorizontalOffset(-380); //<--this provides the margin you need //if you need a custom background color for the popup window, use this line: mPopupWindow.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(MainActivity.this, R.color.gray))); mPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //do something with item by referring to it using the "position" parameter } }); mMoreOptionsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopupWindow.show(); } }); } } 

La parte clave es llamar mPopupWindow.setHorizontalOffset() . Tenga en cuenta que este método es difícil. Dependiendo del valor que establezca en mPopupWindow.setWidth() , tendrá que ajustar el valor en setHorizontalOffset() consecuencia. Simplemente sucedió que para mi aplicación, -380 era la cantidad perfecta de margen que necesitaba desde el final. Así que puede que tenga que jugar con este valor un poco.

Creo que lo mismo se puede decir de usar setHeight() y setVerticalOffset() si desea un margen en la parte superior de su ventana emergente.

Espero que esto ayude :]

Puede configurar popUpWindow en una ubicación determinada

 popupWindow .showAtLocation(popupView, Gravity.CENTER, 0, 0); public void showAtLocation(View parent, int gravity, int x, int y) { showAtLocation(parent.getWindowToken(), gravity, x, y); } 

Si quieres mostrarlo como DropDown entonces puedes intentarlo

 public void showAsDropDown(View anchor, int xoff, int yoff) { showAsDropDown(anchor, xoff, yoff, DEFAULT_ANCHORED_GRAVITY); } 

Echa un vistazo a la documentación de PopupWindow http://developer.android.com/intl/es/reference/android/widget/PopupWindow.html

  • Cómo configurar el fondo de Android PopupMenu a Blanco
  • PopupMenu con iconos
  • Cómo obtener la posición de un elemento de un PopupMenu en un ListView personalizado
  • Divisor de menú emergente para el tema de compatibilidad de aplicaciones
  • Ocultar el elemento de popupmenu
  • La mejor manera de crear menú desplegable en android 2.x como en ICS
  • Cómo configurar el ID para los elementos del menú emergente, que se encuentra como id de la vista?
  • Menú emergente personalizado de Android con conmutador
  • Manejo de elementos del menú emergente
  • El elemento compatible con Android PopupMenu no se comprueba
  • Problema de menú emergente en Android ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.