Saya memiliki bilah tindakan di aplikasi saya dengan 3 item.
Hanya 2 yang dapat ditampilkan karena masalah ruang, jadi saya berharap yang pertama ditampilkan dan sisanya ditampilkan dalam luapan. Namun dalam praktiknya, hanya 2 item pertama yang ditampilkan dan tidak ada luapan yang terdeteksi.
Berikut adalah kode yang relevan: list_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/menu_insert"
android:icon="@android:drawable/ic_menu_add"
android:title="@string/menu_insert"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_call"
android:icon="@android:drawable/ic_menu_call"
android:title="@string/menu_call"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_agenda"
android:icon="@android:drawable/ic_menu_agenda"
android:title="@string/menu_agenda"
android:showAsAction="ifRoom|withText"/>
</menu>
Activity.java
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.list_menu, menu);
return true;
}
android
overflow
android-actionbar
Mats Raemen
sumber
sumber
Jawaban:
Jika Anda ingin menampilkan tiga titik, terlepas dari tombol menu perangkat! maka Anda dapat memanggil metode ini di kelas aplikasi Anda 'metode onCreate-
private void makeActionOverflowMenuShown() { //devices with hardware menu button (e.g. Samsung Note) don't show action overflow menu try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { Log.d(TAG, e.getLocalizedMessage()); } }
sumber
res / menu / menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search / will display always --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="always" android:title="@string/action_search"/> <!-- Location Found --> <item android:id="@+id/action_location_found" android:icon="@drawable/ic_action_location_found" android:showAsAction="always" android:title="@string/action_location_found"/> <!-- More --> <item android:id="@+id/a_More" android:icon="@drawable/ic_action_overflow" android:showAsAction="always" android:title="More"> <menu> <!-- Refresh --> <item android:id="@+id/action_refresh" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_refresh"/> <!-- Help --> <item android:id="@+id/action_help" android:icon="@drawable/ic_action_help" android:showAsAction="never" android:title="@string/action_help"/> <!-- Check updates --> <item android:id="@+id/action_check_updates" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_check_updates"/> </menu> </item> </menu>
MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } }
Unduh Kumpulan Ikon Bilah Tindakan
sumber
android:showAsAction="always"
untuk lebih banyak itemSaya menyadari ini bukan menu luapan, tetapi serupa. Oke, ini sederhana tapi sulit untuk diketahui.
Pertama-tama Anda memerlukan item menu yang ingin Anda gunakan sebagai inflater luapan. Contoh
<item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> </item>
Setelah Anda memiliki item Anda, tambahkan sub-menu yang berisi item Anda yang Anda inginkan di menu tambahan. Contoh:
<item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> <menu> <item android:id="@+id/aM_Home" android:icon="@drawable/home" android:title="Home"/> </menu> </item>
Saat diklik, ini akan meningkatkan item lain di dalamnya. Aplikasi saya menggunakan ActionBarSherlock 4.0 jadi sebelum ini bekerja untuk Anda, Anda perlu mengakses "SplitActionBar". (Masih akan berfungsi di Actionbar android default)
Begini caranya: Dalam file AndroidManifest.xml, Anda perlu menambahkan kode ini di bawah aktivitas yang Anda perlukan untuk menu tambahan.
android:uiOptions="splitActionBarWhenNarrow"
CATATAN: Item Anda yang meningkatkan menu tambahan Anda HARUS
showAsAction="always"
Vwola! Anda memiliki menu tambahan! Semoga saya membantu Anda. :)
sumber
Pada perangkat dengan tombol menu perangkat keras (Galaxy S3, keras kepala seperti Samsung ...) menu tambahan berfungsi sebagai menu 'tradisional', dengan menggunakan tombol menu perangkat keras.
sumber
Saat Anda mengatakan menu "luapan", apakah yang Anda maksud dengan tiga titik yang muncul di akhir untuk menunjukkan bahwa ada lebih banyak item .... atau maksud Anda bilah tindakan terpisah yang muncul di bagian bawah untuk item luapan?
Jika yang Anda maksud adalah bilah tindakan terpisah, Anda harus menambahkan ini ke file manifes aktivitas Anda
android:uiOptions="splitActionBarWhenNarrow"
Secara default, menu luapan tiga titik akan terjadi secara otomatis, jadi sulit untuk mengetahui apa masalahnya dari informasi yang Anda berikan di atas.
sumber
Untuk selalu menampilkan action overflow (tiga titik) pada actionbarcompat:
di file menu, contoh:
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> <item android:id="@+id/action_about" android:title="@string/action_about" app:showAsAction="never"/> </menu>
dan di file aktivitas:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); }
Ini bekerja dengan baik untuk saya.
Diuji di Google Nexus S, Samsung S3.
sumber
Tampaknya pada perangkat dengan tombol menu, menu tambahan tidak ditampilkan di ActionBar. Kami juga tidak memiliki cara untuk mengetahui apakah perangkat memiliki tombol menu perangkat keras sebelum API level 14 (4.0+).
Solusi ini menambahkan tombol luapan ke a
android.support.v7.app.ActionBar
yang membuka menu opsi standar hanya pada pra-Honeycomb (<3.0), jika tidak, serahkan ke sistem. Bagaimanapun Anda dapat memilih antaraalways
atauifRoom
untuk semua tindakan.Dapatkan ikon luapan dari Paket Ikon Bilah Tindakan .
Tambahkan menu (Saya memasukkan beberapa bagian yang tidak relevan seperti judul, memesan, dll.)
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_overflow" android:orderInCategory="100" android:icon="@drawable/ic_action_overflow" app:showAsAction="always" /> <item android:id="@+id/action_first" app:showAsAction="always" /> <item android:id="@+id/action_second" app:showAsAction="ifRoom" /> </menu>
Hapus tindakan overflow kami di 3.0+
@Override public boolean onPrepareOptionsMenu(Menu menu) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { menu.removeItem(R.id.action_overflow); } return super.onPrepareOptionsMenu(menu); }
Akhirnya panggilan
Activity.openOptionsMenu()
dari tindakan luapan.Er ... tidak. Anda tidak dapat tidak memanggil
openOptionsMenu()
dari tombol menu ... tetapi jika Anda menggunakan AndroidAnnotations Anda selesai dengan mudah:@OptionsItem void action_overflow() { openOptionsMenuDeferred(); } @UiThread void openOptionsMenuDeferred() { openOptionsMenu(); }
Jika tidak, Anda harus melakukan hal seperti ini, saya kira
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == id.action_overflow) { openOptionsMenuDeferred(); return true; } } private Handler handler = new Handler(Looper.getMainLooper()); public void openOptionsMenuDeferred() { handler.post(new Runnable() { @Override public void run() { openOptionsMenu(); } } ); }
sumber
Coba ubah tema aplikasi dari Theme.AppCompat.Light.DarkActionBar menjadi Theme.AppCompat.Light
sumber
Letakkan
xmlns:your_app_name="http://schemas.android.com/apk/res-auto"
di dalam tag menu dan sebagai gantinyaandroid:showAsAction="always"
gunakanyour_app_name:showAsAction="always"
untuk mis
<item android:id="@+id/action_search" android:icon="@drawable/icon_search" android:title="@string/search" your_app_name:showAsAction="ifRoom"/>
sumber