2013-08-22 119 views
33

我在我的應用程序中使用了appcompat。我希望菜單項顯示在操作欄上,或者至少是溢出(3個點),以便在沒有空間時顯示它們。操作欄上有很多空間,但仍然不顯示。菜單流程從底部提升,也僅在按下菜單按鈕時提升。菜單項不顯示在操作欄上

menu_activity.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 

    <item 
     android:id="@+id/menu_lang" 
     android:showAsAction="always" 
     android:title="@string/menu_lang" 
     android:icon="@android:drawable/ic_input_lang"/> 

</menu> 

活動:

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

post說,它不工作時的硬件菜單按鈕存在。但其他應用程序能夠在同一設備上顯示項目。所以,這個答案似乎是不正確的。有人可以幫忙嗎?

enter image description here

+0

所以基本上你想打開硬件菜單按鈕被點擊(如果存在)\的操作欄菜單\? – Prateek

+0

向我們展示您的整個菜單xml –

+0

@ prateek不,我希望項目顯示在操作欄上,如上圖所示。正如你所看到的,在右側搜索和添加有兩個選項。所以,我希望它們在操作欄上可見。但是隻有當菜單按鈕被按下時,它們才從屏幕向下顯示。 – rick

回答

71

你似乎使用了錯誤的菜單: 您的文件被命名爲「menu_activity.xml」你充氣菜單與資源ID:R.menu.reminder_menu

菜單的資源名稱應該是相同的文件名,即:R.menu.manu_activity

這個再試一次 - 我遇到了這個過一次,它驅使我堅果...

更新 澄清,上述部分是爲混淆後,請確認:

  1. 您擴展ActionBarActivity。
  2. 您使用(或擴展)活動(或整個應用程序)的一個Theme.AppCompat主題
  3. 因爲在較舊的設備上,Actionbar相關屬性不存在,請確保XML中的所有這些屬性都是與自定義名稱空間一起使用。這裏應該是showAsAction屬性,以便兼容性庫可以提取它們。

您已經定義了自定義名稱空間(「app」,位於菜單標籤中)。根據Android指南,您需要將android:showAsAction標記更改爲app:showAsAction。然後

你糾正menu_activity.xml應該是這樣的:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 

    <item 
     android:id="@+id/menu_lang" 
     app:showAsAction="always" 
     android:title="@string/menu_lang" 
     android:icon="@android:drawable/ic_input_lang"/> 

</menu> 

extended Android guide的動作條涵蓋這些新的和討厭的陷阱......

+0

我忘了改名字,同時發佈提問保持anonimity。但這不是我的問題的答案。對不起。 – rick

+0

沒問題。 如果您使用Google的AppCompat,請確保您擴展ActionBarActivity :) – Patrick

+0

感謝您的回答。我做的。只有當我點擊菜單按鈕時,我才能找到選項。但不是在操作欄上。我想要的是在操作欄上顯示項目,如上圖所示。 – rick

0

嘗試在活動的onCreate():

ActionBar bar = getSupportActionBar(); 
bar.setTitle(R.string.app_name); 

然後:

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) {  
     menu.clear(); 
     getSupportMenuInflater().inflate(R.menu.menu_activity, menu); 
     return super.onPrepareOptionsMenu(menu); 
    } 
+0

能否請您仔細閱讀我的問題?因爲我正在使用appcompat – rick

+0

支持v7 include v4我是不是正確?這應該有效。順便說一句,爲什麼不使用ABS? –

+0

因爲我認爲按照谷歌提供了一個而不是第三方庫。 – rick

5

好吧,我想我找到了一個解決方案。它被稱爲溢出菜單,你需要在你的onCreate方法中調用下面的方法。

private void getOverflowMenu() { 

try { 
    ViewConfiguration config = ViewConfiguration.get(this); 
    Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); 
    if(menuKeyField != null) { 
     menuKeyField.setAccessible(true); 
     menuKeyField.setBoolean(config, false); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

試試這個,讓我知道它是否適合你。

編輯:

我想,我終於明白了你的問題。我可以給你一個想法。如果您不想使用溢出菜單並只顯示已發佈的屏幕截圖中顯示的菜單項,則可以在活動之上創建佈局。

你可以把一個線性佈局,給出一個背景,看起來一樣的操作欄和其他什麼圖標要放在那裏的地方,並與onClickListener給功能給他們。希望這會給你一些想法。這樣您可以創建自己的自定義菜單。嘗試下面的佈局,並用菜單圖標替換可繪製的ic_launcher。然後,只需爲onClick設置onClickListeners,然後在onClick方法中執行想要執行的任何功能。

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:background="#66000000" > 

    <ImageView 
     android:id="@+id/xMenuBtn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:background="@drawable/ic_launcher" /> 
    <TextView 
     android:id="@+id/xMenuTxt" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Chats" 
     android:textSize="18sp" 
     android:layout_toRightOf="@+id/xMenuBtn1" 
     android:layout_centerVertical="true" /> 
    <ImageView 
     android:id="@+id/xMenuBtn2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@+id/xMenuBtn3" 
     android:background="@drawable/ic_launcher" /> 
    <ImageView 
     android:id="@+id/xMenuBtn3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/ic_launcher" /> 

</RelativeLayout> 
+0

+1非常感謝你的答案。它至少顯示溢出菜單,比以前更好。但爲什麼菜單項不顯示在操作欄上?因爲有很多空間。有沒有這樣的事情需要我做,以顯示在操作欄上? – rick

+0

好的,你需要這些菜單按鈕以及溢出菜單嗎?或者你只是想顯示所有的菜單項,因爲它們在你顯示的屏幕上? – 2013-08-23 05:54:36

+0

請在我的答案中查看編輯部分,希望你能對如何做到這一點有所瞭解。 – 2013-08-23 06:14:07