在我的Android应用程序中,我有一个菜单选项,当设备具有专用硬件菜单选项时可以使用。对于另一个设备我没有专门的菜单按钮,所以我尝试添加一个按钮,点击该弹出窗口将显示菜单,弹出窗口正在工作,但没有显示选项,并进一步说明如何工作选定的弹出选项。
我的按钮布局如下:
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_overflow_holo_dark"
android:contentDescription="@string/descr_overflow_button"
android:onClick="showPopup" />
这是我显示弹出窗口的代码:
public boolean showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.emailmenu, popup.getMenu());
popup.show();
return true;
}
这是我的option
代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/bluebutton" android:icon="@drawable/icon_blue_btn"
android:title="" />
<item android:id="@+id/zephyr" android:icon="@drawable/icon_zephyrme"
android:title="" />
<item android:id="@+id/skype" android:icon="@drawable/icon_skype"
android:title="" />
</menu>
我已准备好使用onCreateOptionsMenu()来触发专用菜单键中的选项。如何从弹出窗口开始工作。
答案 0 :(得分:1)
如果您想显示图标而不是标题,请创建您的PopupMenu
,如下所示
方法setForceShowIcon(menu);
会强制PopMenu
显示图标。
你也可以用带图标的文字。
private void showPopupMenu(){
PopupMenu menu=new PopupMenu(this,anchorView);
menu.getMenuInflater().inflate(R.menu.popup_menu,menu.getMenu());
setForceShowIcon(menu);
menu.setOnMenuItemClickListener(menuClickListner);
menu.show();
}
public static void setForceShowIcon(PopupMenu popupMenu) {
try {
Field[] fields = popupMenu.getClass().getDeclaredFields();
for (Field field : fields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(popupMenu);
Class<?> classPopupHelper = Class.forName(menuPopupHelper
.getClass().getName());
Method setForceIcons = classPopupHelper.getMethod(
"setForceShowIcon", boolean.class);
setForceIcons.invoke(menuPopupHelper, true);
break;
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
//This is Menu click listner
PopupMenu.OnMenuItemClickListener menuClickListner = new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.some_id1:
//actions here
break;
case R.id.some_id2:
//actions here..
break;
case R.id.some_id3:
break;
}
return false;
}
};
希望这有帮助!
答案 1 :(得分:0)
试试这个
PopupMenu popup = new PopupMenu(MainActivity.this, button1);
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
startActivity(new Intent(MainActivity.this, SecounActivity.class));
return true;
}
});
popup.show();