Saya menggunakan pustaka appcompat v7 baru yang tersedia mulai dari Android 4.3 (API level 18).
Terlepas dari apa yang ditentukan dalam showAsAction untuk item menu, itu tidak ditampilkan - itu selalu membuat ikon menu tambahan, dan menempatkan bahkan satu item menu di bawah menu.
Mencoba menambahkan menu ke aktivitas seperti ini:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_sizes, menu);
return true;
}
Dan inilah menu saya xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
Apakah ini bug dari pustaka dukungan baru v7, atau hanya ada yang salah dengan kodenya? Saya telah menggunakan kode serupa dengan ActionBarSherlock berkali-kali sebelumnya.
"always"
tidak disarankan; lebih baik gunakan"ifRoom"
dan biarkan OS memutuskan."Jawaban:
Mungkin Anda tidak memiliki namespace yang diperlukan:
Ganti
[yourapp]
dengan nama aplikasi Anda atau namespace apa pun yang diinginkan hati Anda di mana saja.Hal-hal lain yang perlu diperiksa:
ActionBarActivity
Periksa apakah masalah terus berlanjut.
Dokumentasi referensi Android: Menambahkan Tombol Tindakan . Ini teks yang relevan:
sumber
showAsAction
atribut tidak ada di android-7, Anda harus menggunakan namespace aplikasi Andahttp://schemas.android.com/apk/res-auto
di setiap contoh. Itu bukan yang khusus, atau yang cocok dengan aplikasi Anda. Itulah namespace sebenarnya dari dokumentasi. Saya pikir semua orang berarti awalan khusus , dan itu sebenarnya bisa menjadi apa pun yang Anda inginkan. Apakah ini benar?Pikir sendiri. Dengan pustaka dukungan v7, showAsAction harus berada di bawah ruang nama khusus seperti ini:
sumber
Pastikan juga Anda menggunakan inflater yang benar dalam metode ActionBarActivity.onCreateOptionsMenu ().
Solusi yang benar:
Solusi yang salah:
sumber
Untuk Fragmen
Menu dengan namespace kustom akan mencegah showAsAction ditampilkan.
Menggunakan awalan "android:" untuk showAsAction akan berfungsi, meskipun Android Studio akan berkomentar bahwa Anda harus menggunakan ruang nama khusus.
Ini menggunakan fragmen Android SDK 22 dan Support v4, jika ada perbedaan.
sumber
tools:ignore
.Punya masalah yang sama, tetapi di Android 5. Saya punya 3 item tetapi OS mengabaikan atribut saya "selalu" dan hanya menampilkan 2 item. Ini solusi saya:
sumber
setShowAsActionFlags()
membutuhkan API 14, tetapi ini masih solusi terbaik untuk saya.Pastikan juga Anda memiliki jalur yang benar untuk namespace. Itu tidak akan memberi Anda pesan kesalahan jika itu salah.
Saya punya
dari pada
Yang saya tahu adalah bahwa itu tidak berhasil. Tidak yakin bagaimana saya berhasil melupakan bagian / apk dari jalur tersebut, tetapi hal itu terjadi. Tidak ada pesan kesalahan, hanya bug yang sulit dilacak.
sumber
Dalam kasus saya, saya harus menghapus kompilasi build.gradle aplikasi saya 'com.android.support:appcompat-v7:21.0.3'.
Memperhatikan : Min sdk = 14 saya, dan proyek yang dibuat oleh studio android memasukkan ketergantungan saya yang tidak perlu.
Setelah penggantian ini, Anda dapat menulis android: showAsAction = "always"
sumber
Ini mungkin bukan kasus Anda, tetapi saya menggunakan
new MenuInflater(this).inflate(R.menu.my_menu, menu);
mengubahnya menjadi
getMenuInflater().inflate(R.menu.my_menu, menu);
perbaiki masalahnya!
sumber
tidak berfungsi, dengan supportLibraryVersion = '25 .1.0 'compileSdkVersion = 25
lihat "Peringatan"
Harus menggunakan app: showAsAction dengan pustaka appcompat dengan xmlns: app = "http://schemas.android.com/apk/res-auto" lebih sedikit ... (Ctrl + F1)
Saat menggunakan pustaka appcompat, sumber daya menu harus merujuk ke showAsAction di app: namespace, bukan android: namespace.
Demikian pula, saat tidak menggunakan pustaka appcompat, Anda harus menggunakan atribut android: showAsAction.
Saya pikir peringatan itu bisa diabaikan.
sumber
tambahkan namespace kustom seperti ini ke showAsAction dan actionViewClass:
sumber
Saya telah menyelesaikannya dengan mengganti
dengan
Itu adalah tampilan menuitme xml,
sumber
Cara termudah adalah memodifikasi kode Anda dengan menambahkan
dan ubah kode ini
untuk
dan akhirnya
sumber