2012-12-31 61 views
3

所以,我试图模仿像潘多拉的菜单:如何使用actionbarsherlock创建自定义下拉菜单?

Pandora's menu feature

在那里你可以选择打在右上角的菜单按钮或图标,无论哪种方式,它会表现出同样的下拉菜单列表。我试过创建一个“溢出”菜单,但在旧设备上,我发现菜单仍然出现在底部(我不想)。所以,我创建了一个Spinner和使用:

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

这种方法的问题是,它显示一个项目的名称,而不是一个图标(我想我会提供一个图标是不是一个问题)和微调器显示更多的中间(在我想要的一路向右)。

因此,总结一下,有没有办法创建一个类似于潘多拉盒子的菜单,在ActionBar的最右侧显示一个图标,同时按下图标或菜单按钮?任何建议,提示或帮助将不胜感激,谢谢!

回答

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

我希望这会帮助你。

+0

是的,这是正确的,我想了一下,并发布了我的答案。我现在面临的唯一问题是显示一个图标而不是文本。谢谢! – chRyNaN

+0

你可以制作你自己的下拉风格,并设置为属性** Style **。 –

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() {} 

最后我overrided菜单按钮,像所以:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    if (keyCode == KeyEvent.KEYCODE_MENU){ 
     spinnerMenu.performClick(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

这个不做的唯一的事情就是显示一个图标而不是单词。但在那里的一半!我希望这会帮助有人遇到类似的问题。