web-dev-qa-db-ja.com

Android appcompat actionbarメニュー項目showAsActionが機能しない

Android 4.xに表示されますが、2.xには表示されません。ここにmenu.xmlがあります。

<?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>

何か案は?

編集:二重引用符のタイプミスを削除

アイコンだけでなくテキストのみを表示しているという事実でしょうか?ここで立ち往生しています。

23

助けてくれてありがとう、でもどうにか理解できた。それはxmlの問題ではなく、onCreateOptionsMenu関数の問題でした。

私はこれを使用していました

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

これの代わりに

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

これがなぜ機能するのかは完全にはわかりませんが、機能します。

28
<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フレームワークに存在しません。したがって、すべての属性のプレフィックスとして独自の名前空間サポートライブラリで定義されています。

17
Ramesh

私の場合、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);
    }
5
Mario Eraso

アプリで3.0未満のアクションバーをサポートする場合は、サポートライブラリのアプリコンパクトv7を使用する必要があります。

link も確認してください

0
Android Learner

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"toをyout XMLのメニュー要素に追加し、次の形式でshowAsActionを使用します。app:showAsAction="ifRoom"

可能であれば、アクションバーにアイコンが表示されます。

0
Sandro Machado