android inline / horizo​​ntale / list选项菜单

时间:2013-08-14 11:29:26

标签: android menu optionmenu

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

http://i.stack.imgur.com/farTG.jpg

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

  • [图标] +打开/关闭
  • [图标] +拍照
  • [图标] +从画廊中导入图片
  • [图标] +删除图片alrealy发送

但是,我有这样的结果,一个菜单作为块选项:http://i.stack.imgur.com/WZyOz.jpg

我正在使用Android开发者网站上的代码:

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/open_or_close"
          android:icon="@drawable/ic_open"
          android:title="@string/open"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/take_pic"
          android:icon="@drawable/ic_camera"
          android:title="@string/take_picture" />
    <item android:id="@+id/import_pic"
          android:icon="@drawable/ic_import"
          android:title="@string/import_picture" />
    <item android:id="@+id/delete"
          android:icon="@drawable/ic_delete"
          android:title="@string/delete_picture" />
</menu>

Java代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.gallerie_menu, menu);
    return true;
}

有人可以告诉我或向我推荐一些东西吗?

1 个答案:

答案 0 :(得分:1)

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

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

  private PopupWindow myMenu;

然后在该活动设置的OnCreate中,您的菜单窗口会扩展布局xml文件,这是您希望菜单查看的方式,并将事件处理程序添加为necissary:

  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类,但如果您选择使用此选项,我会留给您。

希望这会对你有所帮助。