0

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

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

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

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

但是,我得到了这种结果,一个作为块选项的菜单: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;
}

有人可以给我建议或建议吗?

4

1 回答 1

1

我可以建议的唯一选择不是特别简单的选择。

如果在您的活动中声明一个 PopupWindow 变量:

  private PopupWindow myMenu;

然后在该活动的 OnCreate 设置中,您的菜单窗口膨胀布局 xml 文件,这是您希望菜单查看和添加事件处理程序的方式:

  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 类,但如果您决定使用此选项,我将其留给您。

希望这对您有所帮助。

于 2013-08-14T16:37:46.003 回答