Android ListView中的popup菜单问题

我是Android新手,我正在创buildListviewpopup式菜单。 但是我有它的widthheight问题。 popup菜单可以占用更多的高度和宽度。 所以有很多问题,但是这些都没有帮助我。

创buildpopup菜单我已经尝试了以下方法

1]用下面的代码使用popup式菜单

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

它给出了这个输出

在这里输入图像说明

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

我们可以在ContextMenu中保持宽度和高度,但它总是显示在中心 not each row of our Listview Data

在这里输入图像说明

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

在这里输入图像说明

请为此提供解决scheme。

Related of "Android ListView中的popup菜单问题"

如果您使用的是适配器,则可以在适配器中放入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是您在创build构造函数适配器时必须绑定的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); 

您可以通过编程方式添加这些选项,而不使用如下的xml文件,可能会帮助您。

这里ONE和TWO显示了你在popup菜单中给出的选项索引。 像第一个位置在第二个位置编辑POST 删除POST

1)在图片上点击打开popup菜单:

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

你可以使用ListPopupWindow来得到你想要的结果。 您可以将更多选项图标或菜单图标设置为popup窗口的锚点。

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

你会得到你想要的。

我认为最好的解决scheme是使用PopupWindow,你可以控制它的每一件事情,并且很容易创build你想要的菜单。

Google Play将Holo主题用于PopupMenu 。 你可以在你的styles.xml中创build一个自定义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);