我是Android新手,我正在创建Listview弹出菜单。但我遇到了width
和height
问题。弹出菜单可以采用更高的高度和宽度。 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;
}
});
}
它提供了输出:
2] 使用 ContextMenu 会显示以下输出:
我们可以在ContextMenu中保持宽度和高度但始终显示在中心 not each row of our Listview Data
中。
但我想要below Image type Popup menu
。 宽度和高度都很小。
请为此提供解决方案。
答案 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);