2013-09-21 23 views
2

在我的應用程序中,我使用的是ActionBarSherlock 4.4。OpenOptionsMenu不能使用ActionBarSherlock自定義SubMenu

由於ForcedOverflow已從最新版本中刪除,因此我使用以下XML代碼來複制OverflowMenu。

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/menu_overflow" 
     android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark" 
     android:orderInCategory="100" 
     android:showAsAction="always"> 
     <menu> 
      <item 
       android:id="@+id/action_settings" 
       android:showAsAction="never" 
       android:title="@string/action_settings" /> 
      <item 
       android:id="@+id/recycleBin" 
       android:showAsAction="never" 
       android:title="Recycle Bin" /> 
     </menu> 
    </item> 
</menu> 

對於Android 4.3和2.3.3,溢出對我來說是完美的工作。

我的問題:

2.3.3設備具有硬件菜單鍵。我希望當菜單鍵被按下時,應該打開溢出選項菜單。

我在Activity中使用了下面的代碼,但它不起作用。 (我得到消息,我的logcat雖然)

@Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
      if (event.getAction() == KeyEvent.ACTION_UP && 
       keyCode == KeyEvent.KEYCODE_MENU) { 
       Log.d("HomeActivity", "OpenOptionsMenu"); 
       openOptionsMenu(); 
       return true; 
      } 
     } 
     return super.onKeyUp(keyCode, event); 
    } 

我四處張望了很多,嘗試了所有建議的解決方案。但是沒有人談論使用openOptionsMenu()打開自定義溢出菜單。

我在這裏錯過了什麼嗎?

有沒有一種方法可以讓我們看起來好像父級溢出圖標項android:id="@+id/menu_overflow"已被點擊?

如果有人指出我在這裏錯過了什麼,那將會很棒。

回答

1

我今天遇到同樣的問題。我認爲這是因爲ActionBarSherlock有自己的選項菜單的實現,它覆蓋了Android的選項菜單,在此過程中禁用openOptionsMenu()方法。也許這是圖書館的一個錯誤?

無論如何,我解決了這個由包含菜單如下活動覆蓋onKeyUp

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
     View v = findViewById(R.id.YOUR_MENU_VIEW_HERE); 
     v.performClick(); 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

希望它能幫助。

+1

謝謝回答!但我已經解決了這個問題,使用了另一種與選項菜單相關的方法(查看我的答案)。但是,你的答案是簡單而簡單的(也可能是* hacky *的方法)。 +1從我身邊。我喜歡黑客! :d – Swayam

0

這就是我解決問題的方法,但Ricardo's answer也適用。

private Menu optionsMenu; 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getSupportMenuInflater().inflate(R.menu.display_all, menu); 
     optionsMenu = menu; 
     return true; 
    } 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
      if (event.getAction() == KeyEvent.ACTION_UP && 
        keyCode == KeyEvent.KEYCODE_MENU) { 
       //openOptionsMenu(); 
       optionsMenu.performIdentifierAction(R.id.menu_overflow, 0); 
       return true; 
      } 
     } 
     return super.onKeyUp(keyCode, event); 
    } 
相關問題