2013-11-23 40 views
1

我創建了一個自定義菜單欄。沒有什麼複雜的只是一個LinearLayout,它擁有六個ImageButtons,因爲默認的Android標題菜單對我的應用來說太不一致了。由於不一致,我的意思是顯示在頂部的按鈕數量因設備而異。 要隱藏我設置styles.xmlFEATURE_NO_TITLE也刪除菜單

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="android:windowNoTitle">true</item> 
</style> 

以下在我menu.xml文件我還設置了「showAsAction」參數爲「從不」

<item 
    android:id="@+id/menu_settings" 
    android:showAsAction="never" 
    android:title="@string/my_menu_settings"/> 

一切正常了Android標題欄。我測試我的應用程序上: - 華碩TF300變壓器 - 三星Galaxy Note 2 - 三星Galaxy S 3個 - LG擎天柱4倍高清P880 - 三星Galaxy王牌 - 多模擬器 - 更多一些......

但今天,我在我所有新的索尼Xperia Z1上測試了我的應用程序。 有問題,當我點擊菜單按鈕(三個默認的安卓按鈕之一 - >返回,主頁和菜單),菜單不顯示。 設備返回到應用程序列表。沒有菜單打開!我的問題是: 我的方法有什麼不對嗎? 我只是notized我的Xperia Z該行爲,但我不知道是否有一些完全錯誤的在我的代碼,有很多影響更多的設備......

更新: 我試圖重寫:和的onkeyup onkeydown事件,但這些方法不被調用。我的onCreateOptionsMenu中的斷點也沒有命中。

回答

0

默認的Android標題菜單

這就是所謂的行動吧。

由於不一致,我的意思是顯示在頂部的按鈕數量因設備而異。

這是設計。 Android設備的屏幕尺寸範圍很廣。

我的方法有什麼問題嗎?

溢出是操作欄的一個功能。它發生即使您在某些設備上隱藏操作欄也會顯示。但是,特別是在沒有專用菜單按鈕的設備上,如果隱藏操作欄,則溢出將不可用。因此,如果你要隱藏操作欄,那很好,但是你需要實現你自己的菜單系統,就像遊戲和其他應用程序一樣。

+0

也許「不一致」是錯誤的詞。這聽起來有點消極。我不想責怪這個設計,我知道它是以支持多種屏幕尺寸的方式實現的,並且如果有空間的話,只能將標題放在標題上。 但是,我的菜單中有一個向前和向後的按鈕,如果向前按鈕位於最上方而向後按鈕位於最下面的菜單中,對用戶來說非常不方便... 您能指點我一些遊戲如何實現遊戲這個? 我更新了我的帖子,並試圖捕獲keydown/keyup事件,但這不叫。 – stefan

+0

@stefan:「但是,我的菜單中有一個前進和後退按鈕,如果前進按鈕位於頂部,後退按鈕位於底部菜單中,對用戶來說非常不方便」 - 然後將它們設置爲'android:showAsAction =「always」',並允許其他項目在需要時進入溢出。 「你能指點我一些遊戲如何實現它的資源嗎?」 - AFAIK,內置於各種遊戲引擎中。 「我更新了我的帖子,並試圖捕獲keydown/keyup事件,但這不叫」 - 這不會幫助,因爲不是所有的設備都有一個菜單鍵。 – CommonsWare

+0

android:showAsAction =「always」不保證顯示兩個按鈕。如果一個按鈕只有足夠的空間,另一個按鈕仍然會放到正常的菜單中。 因此,我似乎必須將某種觸發器放到我的自定義菜單欄中,但這會破壞我的設計 有沒有辦法檢測設備是否有菜單按鈕?所以我可以只顯示特定設備的這個按鈕。 – stefan

0

也發現了這個:

boolean hasMenu = ViewConfiguration.get(this).hasPermanentMenuKey(); 
     if(!hasMenu){ 
      //getWindow().setFlags(0x08000000, 0x08000000); 
      try { 
        getWindow().addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null)); 
       } 
       catch (NoSuchFieldException e) { 
       // Ignore since this field won't exist in most versions of Android 
       } 
       catch (IllegalAccessException e) { 
       Log.w("Optionmenus", "Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e); 
       } 
     } 

這裏: How to show option menu in android 4.2

,你怎麼看待這個問題? 似乎在我的Xperia上工作。

更新: 但不在Nexus 10上,華碩變壓器TF 300. 舊版菜單已存在但無法使用。

最終解決方案: - >基於PopupWindow創建我自己的菜單