2014-02-19 98 views
20

我有一個菜單項顯示在Android 4.x,但不是在2.x.這是我menu.xml文件Android appcompat操作欄菜單項showAsAction不工作

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" > 
<item 
    android:id="@+id/menu_filter" 
    android:title="Filter" 
    app:showAsAction="always"/> 
</menu> 

這是我的動作條的風格

<style name="style1_actionBar" parent="@style/Widget.AppCompat.Light.ActionBar"> 
    <item name="android:background">@color/blue_dark</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="actionMenuTextAppearance">@color/white</item> 
    <item name="background">@color/blue_dark</item> 
</style> 

任何想法?

編輯:去除雙引號錯字

這可能是事實,我只顯示文本,沒有圖標?我有點卡在這裏。

+1

您在'xmlns:app =「」http://schemas.android.com/apk/res-auto「」'有錯誤...「...在開始和結束時觀察兩個雙引號......它應該是'xmlns:app =「http://schemas.android.com/apk/res-auto」'。這可能是一個錯字錯誤:-) –

+0

男子我非常興奮,並認爲這將解決它,但沒有,即使與該修補程序相同的問題 –

回答

19

呼,感謝您的幫助球員,但我設法弄明白。這不是xml的問題,它是onCreateOptionsMenu函數的問題。

我就是用這個

new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu); 

,而不是這個

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.activity_wentry_editor, menu); 

不能完全確定爲什麼這個工作,但它確實。

+0

對薑餅不起作用 –

+1

不適用於我...... – bashan

+0

第一個原因爲什麼不起作用(使用getAppliction())是因爲這將使用應用程序上下文而不是使用AppCompat。當您使用您的活動getMenuInflator()時,它將使用AppCompat,並在那裏使用您的應用程序名稱空間。 –

0

如果您希望您的應用支持低於3.0的操作欄,則需要使用支持庫中的app compact v7。

同時檢查link

+0

我正在使用appcompat v7 –

+0

刪除(「)從xmlns:應用程序=」「 http://schemas.android.com/apk/res-auto「」並再試一次 –

+0

我修正了這個問題,但我有同樣的問題 –

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

    <item android:id="@+id/action_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/action_search" 
     **yourapp**:showAsAction="ifRoom" /> 
</menu> 

請參考文檔。 http://developer.android.com/guide/topics/ui/actionbar.html

使用XML從支持庫屬性

注意,上面的showAsAction屬性使用的標籤定義自定義命名空間。當使用由支持庫定義的任何XML屬性時,這是必需的,因爲舊設備上的Android框架中不存在這些屬性。因此,您必須使用自己的名稱空間作爲支持庫定義的所有屬性的前綴。

+0

即使這樣,對我來說也沒用! –

4

在我的情況下,我不得不添加幾行到onCreateOptionsMenu。

Android Studio在使用appCompat時不讓我使用android:showAsAction =「ifRoom」。

app:showAsAction =「ifRoom」不能正常工作,我將它移除了沒有問題。

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu, menu); 
     for (int i = 0; i < menu.size(); i++) { 
      menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
     } 
     return super.onCreateOptionsMenu(menu); 
    } 
+0

謝謝!這個爲我做了! – Innova

0

使用,它擴展了AppCompact的活動菜單,有必要進口的XML應用程序上下文並使用它:

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

    <!-- "Mark Favorite", should appear as action button if possible --> 
    <item 
     android:id="@+id/action_favorite" 
     android:icon="@drawable/ic_favorite_black_48dp" 
     android:title="@string/action_favorite" 
     app:showAsAction="ifRoom"/> 

    <!-- Settings, should always be in the overflow --> 
    <item android:id="@+id/action_settings" 
      android:title="@string/action_settings" 
      app:showAsAction="never"/> 

</menu> 

你需要基本上做的是增加xmlns:app="http://schemas.android.com/apk/res-auto"到菜單元素,並使用以下格式的showAsActionapp:showAsAction="ifRoom"

如果可能,這將在操作欄中顯示圖標。