40

新しいアップデートで、GoogleはAPIレベル7+でActionBarをサポートする新しいAPIサポートライブラリをリリースしました。「ActionBarActivity」メニューが表示されていないandroid.support.v7

私はこのアップデートまでActionBarSherlockを使用して、私はメニューをロードするためのコードを書いた:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.activity_main, menu); 
    return true; 
} 

とメニューファイル:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" android:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" android:showAsAction="always"></item> 
</menu> 

アクションバー上のメニューボタンを設定します。このコードはActionBarSherlockで完全に機能しました。しかし、アクションバーを新しいサポートライブラリに変更したとき、ボタンはアクションバーに表示されません。たとえそれがandroid:showAsAction="always"に設定されていても。そして、コードをデバッグすると、関数menu.getSize()が2を返し、それは正しいですが、ボタンは表示されません。

ボタンが新しいサポートライブラリに表示されないのはなぜですか?

答えて

104

デバイスまたはエミュレータのMENUボタンを押して、オーバーフローで表示されているかどうかを確認してください。

もしそうなら、あなたの<menu> XMLを変更する必要があるという問題があります。 ActionBarSherlockおよびネイティブAPIレベル11+アクションバーで動作するメニューXMLは、AppCompatアクションバーバックポートでは機能しません。

あなたのメニューXMLは次のように検討する必要があります:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" 
> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" yourapp:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" yourapp:showAsAction="always"></item> 
</menu> 

をそして、あなたはアクションバー(例えば、yourapp:actionLayout)に関連する他の何かのために同じyourapp接頭辞を使用する必要があります。

これはthe action bar documentationでカバーされています。あなたはテキストの両方とアイコンを見たい場合は

+2

さて、問題は 'xmlns:yourapp =" http://schemas.android.com/apk/res-auto "'でした。これはSupport v7の変更ですか?原因は 'ActionBarSherlock'です。私の古いコードは完全に動作しました。 – nrofis

+5

@nrofis:AppCompatがなぜActionBarSherlockの方法で' android:showAsAction'を使用できないのか分かりません。 – CommonsWare

+0

ありがとう、これは私が間に合うように管理された、小さく奇妙な変化です! –

0

私はthe answer.

に少しを追加したい、私はちょうどそれをテストしてみたshowAsActionwithTextを使用してください。 withTextを使わずにalwaysまたはifRoomを使用したとき、私はアイコンしか見ませんでした。

関連する問題