我正在尝试实现一个操作栏,其中一个按钮上的按钮显示一个弹出菜单。 这是菜单。 XML(操作栏中的菜单项)
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/search"
android:icon="@drawable/ic_action_search"
android:orderInCategory="0"
android:showAsAction="always"
android:title="@string/menu_search"/>
<item
android:id="@+id/refresh"
android:icon="@drawable/ic_action_refresh"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_refresh"/>
<Item
android:id="@+id/popup"
android:icon="@drawable/ic_action_search"
android:onClick="showPopup"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_search" />
我希望在点击ID为“@ + id / popup”的项目时显示一个弹出菜单。
这是弹出菜单的XML
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item1"
android:icon="@drawable/ic_action_search"
android:orderInCategory="0"
android:showAsAction="always"
android:title="@string/menu_search"/>
<item
android:id="@+id/item2"
android:icon="@drawable/ic_action_search"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_search"/>
这是按钮的onClick方法
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.overflow, popup.getMenu());
popup.show();
}
问题是单击该按钮时没有显示弹出窗口。需要帮助的人。
答案 0 :(得分:15)
我在这里找到了这个:http://developer.android.com/guide/topics/ui/menus.html
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/selectImg"
android:icon="@android:drawable/ic_dialog_dialer"
android:showAsAction="always">
<menu>
<item android:id="@+id/top"
android:title="@string/topimg"/>
<item android:id="@+id/bottom"
android:title="@string/botimg" />
</menu>
</item>
</menu>
单击该项目时,您可以在菜单中放置菜单以显示子菜单。然后,在Java中,您可以使用与往常相同的方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
// View v = findViewById(R.id.f);
switch (item.getItemId()) {
case R.id.top:
//action
return true;
default:
return super.onOptionsItemSelected(item);
}
}
即使它是子菜单,仍然可以识别xml中'top'的id。这对我有用,它看起来就像弹出菜单。
答案 1 :(得分:14)
大家好,这是我自己的解决方案:我创建了showPopup方法,然后我在onOptionsItemSelected中调用它,如下所示:
public void showPopup(){
View menuItemView = findViewById(R.id.menu_save);
PopupMenu popup = new PopupMenu(getActivity(), menuItemView);
MenuInflater inflate = popup.getMenuInflater();
inflate.inflate(R.menu.popup, popup.getMenu());
popup.show();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_save:
showPopup();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
popup.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/decon"
android:showAsAction="ifRoom"
android:title="@string/decon"/>
<item
android:id="@+id/mRes"
android:showAsAction="ifRoom"
android:title="@string/mesRes"/>
</menu>
main.xml =&gt;它被称为onCreateOptionsMenu
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_save"
android:enabled="true"
android:icon="@drawable/action_save"
android:showAsAction="ifRoom|withText"
android:title="@string/action_save"
android:visible="true"/>
</menu>
最后我
implements PopupMenu.OnMenuItemClickListener to @Override onMenuItemClick method.
答案 2 :(得分:3)
由于弹出菜单是MENU,您必须通过实现“onOptionsItemSelected”来处理此问题。您将能够为每个菜单选项说明要做什么。它将取代您定义的“onClick”选项,并将自动调用。
答案 3 :(得分:2)
尝试将'this'更改为getActivity()。
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(getActivity(), v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.overflow, popup.getMenu());
popup.show();
}
希望它有所帮助.. !!
答案 4 :(得分:1)
我找到了解决方法。而不是使用菜单XML来膨胀弹出菜单,我制作了一个XML布局文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#8b8989"
android:orientation="vertical"
android:padding="10dip" >
<TextView
android:id="@+id/menuItem1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/menu1" />
<TextView
android:id="@+id/menuItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/menu2" />
<TextView
android:id="@+id/menuItem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/menu3" />
</LinearLayout>
我更改了onClick方法
public void showPopup(View v) {
LayoutInflater inflater = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PopupWindow pw = new PopupWindow(inflater.inflate(
R.layout.overflow_layout, null, false), 300, 400, true);
pw.showAtLocation(findViewById(R.id.container), Gravity.CENTER, 0,
0);
}
这解决了问题
答案 5 :(得分:0)
android:onClick="popup"
可能应该将其更改为android:onClick="showPopup"
?