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

时间:2012-12-31 22:04:56

标签: java android menu android-actionbar actionbarsherlock

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

Pandora's menu feature

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

getSupportActionBar().setNavigationMode(getSupportActionBar().NAVIGATION_MODE_LIST);

这种方法的问题在于它显示项目的名称而不是图标(我假设我必须提供一个不是问题的图标)并且微调器显示更多朝向中间(我想要的地方)它一直到右边)。

所以,总而言之,有没有办法创建一个菜单,类似于潘多拉的菜单,在ActionBar的最右侧显示一个图标,并且将通过按下图标或菜单按钮?任何建议,提示或帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:1)

如果我了解你想创建一个弹出菜单,并在用户点击某个硬件按钮上的图标时显示它们。

嗯,here是弹出菜单的一个非常好的解释,如果你想得到一些设备密钥,试试这个:

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;
}

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

答案 1 :(得分:1)

通过一些实验,我设法获得了我想要完成的部分。我不确定这是否是最好的方法,但确实有效。

我发现微调器不会显示在屏幕最右侧的原因是因为该空间是为菜单项保留的。如果你还记得,我没有使用菜单项的原因是因为在你点击菜单按钮的旧设备上,它会显示屏幕底部的项目(不是我想要的)。但我找到了一个解决方案。

我首先用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>

"@layout/spinner"

    <?xml version="1.0" encoding="utf-8"?>
    <com.actionbarsherlock.internal.widget.IcsSpinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner_menu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"  
    />

然后在onCreateOptionsMenu:

    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);
}

唯一不做的是显示图标而不是单词。但到了一半!我希望这能帮助遇到类似问题的人。