J'ai un menu contextuel dans une adaptateur ListView pour chaque article. Le menu apparaît sur le bord gauche de l'écran, comment puis-je modifier cela pour être sur la droite
private void showPopupMenu(View v, final App app) { PopupMenu popupMenu = new PopupMenu(context, v); popupMenu.getMenuInflater().inflate(R.menu.quick_action_menu, popupMenu.getMenu()); popupMenu .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { ...
5 Réponses :
vous ne pouvez pas. comme Docs disent : P>
Un popupmenu affiche un menu dans une fenêtre contextuelle modale ancrée à un Voir. La popup apparaîtra sous la vue d'ancrage s'il y a de la place ou au-dessus de ce qu'il n'y ait pas. Si l'IME est visible, la popup ne sera pas chevaucher jusqu'à ce qu'il soit touché. Toucher à l'extérieur de la popup rejeter-le. P> blockQuote>
Vous voudrez peut-être essayer d'utiliser popupwindow peut-être, ce qui permet ce positionnement. P>
Juste une petite addition: utilisez une popupwindow et définissez la position souhaitée à l'aide de la présentation de la présentation (vue parent, int gravity, int x, int.
En effet, ce n'était pas clair pourquoi j'ai suggéré une fenêtre pop up. Mise à jour, merci.
Cela a du sens, mais il contredit le fait que vous pouvez définir une gravité (SetGrovity (int)) qui ne fait aucun effet
Vous pouvez utiliser ListPopupWindow pour le menu contextuel de la liste Afficher la liste. Il existe des fonctions pour définir des décalages ( listpopupwindow ). P>
ou vous pouvez définir des décalages pour votre popupwindow explicitement à l'aide de cette fonction p>
meilleur en retard qu'une fois =) C'est ma décision, vous permet de définir PopupMenu sur les coordonnées spécifiées. Le code n'est pas très bon mais cela fonctionne.
public void show(Activity activity, float x, float y) { final ViewGroup root = (ViewGroup) activity.getWindow().getDecorView().findViewById(android.R.id.content); final View view = new View(context); view.setLayoutParams(new ViewGroup.LayoutParams(1, 1)); view.setBackgroundColor(Color.TRANSPARENT); root.addView(view); view.setX(x); view.setY(y); PopupMenu popupMenu = new PopupMenu(context, view, Gravity.CENTER); popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() { @Override public void onDismiss(PopupMenu menu) { root.removeView(view); } }); popupMenu.show(); }
Solution parfaite pour montrer une popup sur les coordonnées absolues!
Vous pouvez modifier la position de votre popupmenu en utilisant les attributs suivants:
première gravité de gravité.end p> <item name="popupMenuStyle">@style/MyPopupMenu</item>
popup.setgravity () nécessite le niveau d'API 23
Assurez-vous que vous utilisez une bibliothèque de support Android compatible en arrière et après l'importation Androidx.appcompat.Widget.PopupMenu;
Cela a fonctionné pour moi.
Vous pouvez utiliser popupwindow à la place. Vous avez de nombreuses options pour positionnement: p>
popupwindow.showasdropdown (vue parent) code> affichera ci-dessous la vue parent li>
-
popupwindow.showasdropdown (vue anchor, int xoff, int yoff) code> montrera ci-dessous la vue parent mais applique également le décalage li>
-
popupwindow.showasdropdown (vue d'ancrage, int xoff, int yoff, int gravity) code> comme avant mais aussi la gravité li>
-
popupwindow.showatlocation (vue parent, int gravity, int x, int y) code> popup à toute position absolue li>
ul>