2012-12-11 67 views
2

上銀河S3 ICS的ActionBar溢出菜單項時,我有其中ActionBar中的按鈕被配置爲showAsAction =「總是」並且被示出的硬件溢出菜單和兩個上的問題操作按鈕。我希望它不會顯示在硬件溢出菜單上,並且只在操作按鈕上顯示。我可以禁用onCreateOptionsMenu中的menuitem,但它會隱藏兩個地方的按鈕。示出了兩個頂端的ActionBar和溢出菜單

一些需要注意的:如果我強迫「3點」操作菜單顯示,刷新按鈕被正確地從硬件溢出菜單隱藏,但仍然沒有得到來自硬件溢出菜單隱藏。

別的東西要注意:如果我叫menu.size()在任何onCreateOptionsMenu或onPrepareOptionsMenu,它不反映額外的按鈕。例如,我有四個按鈕,第一個按鈕顯示在Action按鈕和溢出菜單中。 menu.size()仍然返回4,似乎並沒有意識到它正在顯示一個額外的按鈕。

我不能發佈的截圖,因爲這是一個客戶端應用程序,但這裏是我的actionbar.xml文件。刷新按鈕顯示在頂部的溢出和操作欄中。

actionbar.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/refreshmenuitem" 
      android:icon="@drawable/refreshicon" 
      android:title="Refresh" 
      android:showAsAction="ifRoom" 
      android:visible="true" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      /> 
    <item android:id="@+id/helpbutton" 
     android:title="Help" 
     android:showAsAction="collapseActionView" 
     android:icon="@drawable/ic_action_helpbutton" /> 
    <item android:id="@+id/settingbutton" 
     android:title="Settings" 
     android:icon="@drawable/ic_action_settingbutton" 
     android:showAsAction="collapseActionView" /> 
    <item android:id="@+id/importbutton" 
     android:title="Import file" 
     android:icon="@drawable/ic_action_importbutton" 
     android:showAsAction="collapseActionView" /> 
</menu> 
+2

請張貼一個或兩個截圖,以幫助說明您所看到的。 – CommonsWare

+0

請同時發佈您的菜單代碼或xml –

回答

2

所以我想通了,但它是一種黑客攻擊的。因此,如果您的手機(如Samsung Galaxy S3)具有硬件菜單按鈕,則onCreateOptionsMenu函數實際上會被調用兩次。一次用於當Activity被加載時加載應該顯示在右上角的任何菜單項,以及另一次當用戶按下硬件菜單按鈕時。我所做的只是創建一個名爲_firstTimeOnCreateOptionsMenu變量被設置爲假後的第一時間就onCreateOptionsMenu方法:

public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Populates the actionbar/Menu 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.actionbarmenu, menu); 
     boolean hardware = false; 

     if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
     { 
      hardware = ViewConfiguration.get(context).hasPermanentMenuKey(); 
     } 

     MenuItem b1 = menu.findItem(R.id.refreshmenuitem); 

     if(!hardware || _firstTimeOnCreateOptionsMenu) 
     { 
      b1.setVisible(true); 
      _firstTimeOnCreateOptionsMenu = false; 
     } 
     else 
     { 
      b1.setVisible(false); 
      _firstTimeOnCreateOptionsMenu = true; 
     } 
    } 

希望這有助於別人誰是有這個問題。

0

我自己也有點驚訝,如果這是問題,因爲你希望剛剛被忽略未知的XML,但根據documentation<item>不支持android:layout_widthandroid:layout_height

+0

是的,這不是它,但我刪除它,因爲它沒有做任何事情。 – rplankenhorn