android内联/水平/列表选项菜单

android内联/水平/列表选项菜单,android,menu,optionmenu,Android,Menu,Optionmenu,我正在尝试创建这种列表菜单,但没有成功: 我想使用Android菜单按钮或按下带有“打开”或“关闭”文本的箭头。 该菜单将显示选项列表: [图标]+打开/关闭 [图标]+拍照 [图标]+从gallerie导入图片 [图标]+删除已发送的图片 但是,我得到了这样的结果,菜单作为块选项: 我使用的代码来自Android开发者网站: XML文件(/menu/gallerie_menu.XML): 有人能给我一些建议吗?我能建议的唯一选择不是特别简单 如果在活动中声明了PopupWindow变量:

我正在尝试创建这种列表菜单,但没有成功:

我想使用Android菜单按钮或按下带有“打开”或“关闭”文本的箭头。 该菜单将显示选项列表:

  • [图标]+打开/关闭
  • [图标]+拍照
  • [图标]+从gallerie导入图片
  • [图标]+删除已发送的图片
但是,我得到了这样的结果,菜单作为块选项:

我使用的代码来自Android开发者网站:

XML文件(/menu/gallerie_menu.XML):


有人能给我一些建议吗?

我能建议的唯一选择不是特别简单

如果在活动中声明了PopupWindow变量:

  private PopupWindow myMenu;
然后,在“活动设置”的“创建”中,您的菜单窗口按您希望的菜单外观膨胀布局xml文件,并根据需要添加EventHandler:

  View v = getLayoutInflater().inflate(R.layout.test_menu, null, false);
  Button b = (Button)v.findViewById(R.id.myFirstMenuOption);
b.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //do something....              
    }           
});//repeat for rest off menu buttons.
    myMenu = new PopupWindow(v, 0, 0, false);
    myMenu.setWidth(LayoutParams.MATCH_PARENT);
    myMenu.setHeight(LayoutParams.WRAP_CONTENT);
然后覆盖活动的onKeyDown方法以显示菜单以响应按钮按下:

  @Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_MENU) 
    {
        if (myMenu.isShowing()) 
        {
            myMenu.dismiss();
        } 
        else 
        {
            ScrollView sv = (ScrollView)findViewById(R.id.mainLayout);
            myMenu.showAtLocation(sv, android.view.Gravity.BOTTOM | android.view.Gravity.LEFT, 0, 0);
        }
        return true; //swallow the event
    }
    return super.onKeyDown(keyCode, event);
}
此处的ScrollView是我的活动布局xml中最顶层的视图

从这里开始,在中有各种各样的选项,例如编写自己的可重用PopupWindow类,但是如果您决定使用这个选项,我将把它留给您


希望这对您有所帮助。

下面的答案有用吗?
  View v = getLayoutInflater().inflate(R.layout.test_menu, null, false);
  Button b = (Button)v.findViewById(R.id.myFirstMenuOption);
b.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //do something....              
    }           
});//repeat for rest off menu buttons.
    myMenu = new PopupWindow(v, 0, 0, false);
    myMenu.setWidth(LayoutParams.MATCH_PARENT);
    myMenu.setHeight(LayoutParams.WRAP_CONTENT);
  @Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_MENU) 
    {
        if (myMenu.isShowing()) 
        {
            myMenu.dismiss();
        } 
        else 
        {
            ScrollView sv = (ScrollView)findViewById(R.id.mainLayout);
            myMenu.showAtLocation(sv, android.view.Gravity.BOTTOM | android.view.Gravity.LEFT, 0, 0);
        }
        return true; //swallow the event
    }
    return super.onKeyDown(keyCode, event);
}