2012-12-31 65 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); 
} 

這個不做的唯一的事情就是顯示一個圖標而不是單詞。但在那裏的一半!我希望這會幫助有人遇到類似的問題。