如何更改弹出菜单弹出窗口的位置

时间:2012-11-18 21:08:31

标签: android android-layout

我在listview适配器中为每个项目都有一个弹出菜单。屏幕左边会弹出菜单,如何将其更改为右侧

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 个答案:

答案 0 :(得分:7)

比一次更好=)这是我的决定,允许你将PopupMenu设置为指定的坐标。代码不是很好但是有效。

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

答案 1 :(得分:2)

您可以使用以下属性更改PopupMenu的位置: 重力 dropDownHorizo​​ntalOffset dropDownVerticalOffset

首先将重力设置为Gravity.END

popup.setGravity(Gravity.END);

然后通过创建样式

来更改下拉列表偏移量
<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu">
    <item name="android:dropDownHorizontalOffset">-4dp</item>
    <item name="android:dropDownVerticalOffset">4dp</item>
</style>

如果要重叠锚视图,请使用

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

最后将MyPopupMenu应用于您的主题

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

答案 2 :(得分:0)

你做不到。 As docs say

  

PopupMenu在模式弹出窗口中显示一个菜单,锚定到a   视图。如果有空间,则弹出窗口将显示在锚点视图下方   如果没有,就在它之上。如果IME可见,则弹出窗口不会   重叠它直到它被触摸。触摸弹出窗口外面会   解雇它。

您可能想尝试使用PopupWindow,这样可以进行此类定位。

答案 3 :(得分:0)

您可以将ListPopupWindow用于show List弹出菜单。有设置偏移的功能(ListPopupWindow)。

或者您可以使用此function

明确设置PopupWindow的偏移量

答案 4 :(得分:0)

您可以改用PopupWindow。那里有很多定位选项:

  • popupWindow.showAsDropDown(View parent)将显示在父视图下方
  • popupWindow.showAsDropDown(View anchor, int xoff, int yoff)将显示在父视图的下方,但也会应用偏移量
  • popupWindow.showAsDropDown(View anchor, int xoff, int yoff, int gravity)像以前一样,但也很引力
  • popupWindow.showAtLocation(View parent, int gravity, int x, int y)在任何绝对位置弹出

BR