Java 如何使用actionbarsherlock创建自定义下拉菜单?

Java 如何使用actionbarsherlock创建自定义下拉菜单?,java,android,menu,android-actionbar,actionbarsherlock,Java,Android,Menu,Android Actionbar,Actionbarsherlock,所以,我试着模仿潘多拉的菜单: 在您可以选择点击右上角的菜单按钮或图标的地方,无论哪种方式,都会显示相同的下拉菜单列表。我曾尝试创建一个“溢出”菜单,但在旧设备上,我发现该菜单仍然显示在底部(我不想要)。因此,我创建了一个微调器,并使用: getSupportActionBar().setNavigationMode(getSupportActionBar().NAVIGATION_MODE_LIST); 这种方法的问题在于,它显示的是一个项目的名称而不是图标(我假设我必须提供一个没有问题的

所以,我试着模仿潘多拉的菜单:

在您可以选择点击右上角的菜单按钮或图标的地方,无论哪种方式,都会显示相同的下拉菜单列表。我曾尝试创建一个“溢出”菜单,但在旧设备上,我发现该菜单仍然显示在底部(我不想要)。因此,我创建了一个
微调器
,并使用:

getSupportActionBar().setNavigationMode(getSupportActionBar().NAVIGATION_MODE_LIST);
这种方法的问题在于,它显示的是一个项目的名称而不是图标(我假设我必须提供一个没有问题的图标),而微调器显示的更靠近中间(我希望它一直向右)


总之,有没有一种方法可以创建一个菜单,类似潘多拉的菜单,在
操作栏的最右侧显示一个图标,并通过按下图标或菜单按钮打开?任何建议、提示或帮助都将不胜感激,谢谢

如果我明白了,您希望创建一个弹出菜单,并在用户单击某个硬件按钮上的图标时显示它们

这是对弹出菜单的一个很好的解释,如果您想获得一些设备键,请尝试以下方法:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_CENTER:
        Toast.makeText(this, "The Center key was pressed",
                Toast.LENGTH_SHORT).show();
        return true;

    case KeyEvent.KEYCODE_DPAD_RIGHT:
        Toast.makeText(this, "The Right key was pressed",
                Toast.LENGTH_SHORT).show();
        return true;

    case KeyEvent.KEYCODE_DPAD_LEFT:
        Toast.makeText(this, "The Left key was pressed", Toast.LENGTH_SHORT)
                .show();
        return true;

    case KeyEvent.KEYCODE_BACK:
        Toast.makeText(this, "The Back key was pressed", Toast.LENGTH_SHORT)
                .show();

        //---this event has been handled---
        return true;
    }

    //---this event has not been handled---
    return false;
}

我希望这会对你有所帮助。

通过一些实验,我成功地实现了我想要实现的部分目标。我不确定这是否是最好的方法,但确实有效

<>我发现,旋转器不会显示在屏幕最右边的原因是,这个空间是为菜单项保留的。如果您还记得的话,我没有使用菜单项的最初原因是,在旧设备上,当您点击菜单按钮时,它会在屏幕底部显示菜单项(不是我想要的)。但我找到了一份工作

我首先用XML创建菜单:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/spinner_menu_item"
        android:showAsAction="always" 
        android:actionLayout="@layout/spinner" />
    </menu>
然后在OnCreateOptions菜单中:

    getSupportMenuInflater().inflate(R.menu.basic_menu, menu);
    MenuItem item = menu.findItem(R.id.spinner_menu_item);
    spinnerMenu = (IcsSpinner)item.getActionView();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_dropdown_item_1line, menuItems);
    spinnerMenu.setAdapter(adapter);
    spinnerMenu.setOnItemSelectedListener(new IcsAdapterView.OnItemSelectedListener() {}

唯一做不到的是显示图标而不是文字。但是到了一半!我希望这将有助于面临类似问题的人。

是的,没错,我刚刚发现了这一点,并公布了我的答案。我现在面临的唯一问题是显示图标而不是文本。谢谢可以创建自己的下拉样式并设置为特性样式。
    getSupportMenuInflater().inflate(R.menu.basic_menu, menu);
    MenuItem item = menu.findItem(R.id.spinner_menu_item);
    spinnerMenu = (IcsSpinner)item.getActionView();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_dropdown_item_1line, menuItems);
    spinnerMenu.setAdapter(adapter);
    spinnerMenu.setOnItemSelectedListener(new IcsAdapterView.OnItemSelectedListener() {}
    @Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if (keyCode == KeyEvent.KEYCODE_MENU){
        spinnerMenu.performClick();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}