Android ListView中的弹出菜单问题

时间:2016-02-16 05:51:02

标签: android listview android-menu popupmenu

我是Android新手,我正在创建Listview弹出菜单。但我遇到了widthheight问题。弹出菜单可以采用更高的高度和宽度。 SO中有很多问题,但这些都没有帮助我。

创建弹出菜单我已尝试以下方法

1] 使用弹出式菜单,代码如下:

 private void showPopupMenu(View view){
        Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenu);
        PopupMenu popupMenu = new PopupMenu(wrapper,view);

        popupMenu.getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu());
        popupMenu.show();

        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
            @Override
        public boolean onMenuItemClick(MenuItem item){
                switch (item.getItemId()){
                    case R.id.install:
                        Intent intent = new Intent(ViewAllRelationActivity.this,EditRelativeActivity.class);
                        startActivity(intent);
                        break;
                    case R.id.addtowishlist:
                        break;

                }
                return false;
            }
        });
    }

它提供了输出

enter image description here

2] 使用 ContextMenu 会显示以下输出

我们可以在ContextMenu中保持宽度和高度始终显示在中心 not each row of our Listview Data中。

enter image description here

但我想要below Image type Popup menu宽度和高度都很小

enter image description here

请为此提供解决方案。

5 个答案:

答案 0 :(得分:2)

您可以在不使用xml文件的情况下以编程方式添加这些选项,如下所示,这可能会帮助您解决问题。

这里有一个和两个显示您在弹出菜单中给出的选项的索引。比如在第二个位置编辑帖子的第一个位置删除帖子

1)在图像上单击打开弹出菜单:

private final static int ONE = 1;
private final static int TWO = 2;

PopupMenu popupMenu = new PopupMenu(this, findViewById(R.id.img_detail_information_options));
popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, getResources().getString(R.string.detail_information_edit_post));
popupMenu.getMenu().add(Menu.NONE, TWO, Menu.NONE, getResources().getString(R.string.detail_information_remove_post));
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();

答案 1 :(得分:2)

如果您使用的是适配器,则可以在适配器中放入getView(...)方法

    imvMore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showPopupMenu(act,v);
        }
    });

并放置方法

private void showPopupMenu(Activity act, View view){
    PopupMenu popupMenu = new PopupMenu(act,view);
    popupMenu.getMenuInflater().inflate(R.menu.menu_popup, popupMenu.getMenu());
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {

            }
            return true;
        }
    });
    popupMenu.show();
}

在适配器类中。

注意:act是在创建构造函数适配器时必须绑定的Activity,例如:

public YourAdapter(Activity act, ArrayList<ItemOfYourModel> data){
    this.data = data;
    this.act = act;
}

在“活动”中,您可以编码:

ArrayList<ItemOfYourModel> listData = new ArrayList<ItemOfYourModel>();
listData.add(new YourItemOfYourModel(...));
YourAdapter adapter = new YourAdapter(this,listData);

答案 2 :(得分:2)

您可以使用ListPopupWindow来获得您想要实现的目标。您可以将更多选项图标或菜单图标设置为弹出窗口的锚点。

ListPopupWindow mListPopupWindow;
mListPopupWindow = new ListPopupWindow(this, null);
mListPopupWindow.setWidth(300);
mListPopupWindow.setAnchorView(menuIcon);
mListPopupWindow.setHeight(200);
mListPopupWindow.setAdapter(yourAdapter);
mListPopupWindow.show();

你会得到你想要的东西。

答案 3 :(得分:1)

我认为最好的解决方案是使用PopupWindow,你可以控制它的每一个东西,并且很容易创建你想要的菜单。

答案 4 :(得分:1)

Google Play将Holo主题用于PopupMenu。您可以通过在styles.xml中创建自定义style来执行相同的操作:

<style name="PopupMenuStyle" parent="android:Theme.Holo.Light">
        <!-- Your custom attributes must be put here. This is optional, but the parent must not be changed -->
</style>

然后更改代码中的PopupMenu样式:

Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenuStyle);
PopupMenu popupMenu = new PopupMenu(wrapper,view);