40

Yeni güncellemede Google, API 7+ seviyesinde ActionBar'ı destekleyen yeni bir API destek kütüphanesi yayınladı. android.support.v7 ile "ActionBarActivity" hiçbir menü gösterilmiyor

bu güncellemesine kadar ActionBarSherlock kullanılan ve menü yüklemek için kod yazdı:

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

ve menü dosyasını:

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

eylem çubuğunda menü düğmeleri ayarlamak için. Bu kod, ActionBarSherlock ile mükemmel bir şekilde çalıştı. Ancak eylem çubuğunu yeni destek kitaplığına değiştirdiğimde, düğmeler eylem çubuğunda gösterilmez. android:showAsAction="always" olarak ayarlanmış olsalar bile. Ve kodu ayıklarken, menu.getSize() işlevi 2 döndürür ve bu doğrudur, ancak hiçbir düğme gösterilmez ..

Düğmeler neden yeni destek kitaplığında gösterilmiyor?

cevap

104

Cihazınızdaki veya emülatörünüzdeki MENÜ düğmesine basmayı deneyin ve taşma durumunda görünüp görünmediklerini görün.

Bunu yaparsanız, o zaman sorun, <menu> XML'inizin değişmesi gerektiğidir. ActionBarSherlock ve yerel API Düzey 11 + eylem çubuğuyla çalışan Menu XML, AppCompat eylem çubuğu backport ile çalışmaz.

Kişisel menü XML böyle bakmak gerekir:

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

Ve başka işlem çubuğuna ilgili herhangi bir şey için aynı yourapp öneki kullanmanız gerekir (ör yourapp:actionLayout).

Bunu, the action bar documentation numaralı belgede görebilirsiniz.

+2

Yea, sorun 'xmlns: yourapp =" http://schemas.android.com/apk/res-auto "' idi. Bu Destek v7 için değişiklik mi? Çünkü 'ActionBarSherlock' eski kodum mükemmel çalıştı – nrofis

+5

@ nrofis: AppCompat'ın neden Android: showAsAction 'ActionBarSherlock yolunu kullanamadığı hakkında hiçbir fikrim yok. – CommonsWare

+0

Teşekkürler Bu, gözden kaçırmayı başardığım küçük ve tuhaf bir değişiklik! –

0

hem metin hem bir simgegörmek istiyorsanız ben sadece test ettik showAsAction içinde withText kullanın lütfen, the answer.

için biraz eklemek istiyorum; withText olmadan always veya ifRoom kullandım, sadece bir simge gördüm.

İlgili konular