Eylem çubuğunda bir Açılır Menü öğesi nasıl eklenir


82

Android Honeycomb uygulamamda gezinme stili olarak Tabs kullanıyorum. Taşma düğmesinin yanına bir öğe eklemek istiyorum, ancak bu öğenin bir açılır liste olmasını istiyorum ve kullanıcı orada bir seçenek belirleyebilecek, ancak gezinmeyle ilgili değil. Kullandığımdan beri en kolay yol nedirmActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Özel bir görünüm kullanmadan yapmak mümkün mü?


Yanıtlar:


221

İlk seçenek:

menu / options.xml:

<item
    android:icon="@drawable/ic_menu_sort"
    android:showAsAction="ifRoom">
    <menu>
        <item
            android:id="@+id/menuSortNewest"
            android:title="Sort by newest" />
        <item
            android:id="@+id/menuSortRating"
            android:title="Sort by rating" />
    </menu>
</item>

İkinci seçenek:

menu / options.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuSort"
        android:showAsAction="ifRoom"
        android:actionLayout="@layout/action_sort"  />
</menu>

layout / action_sort.xml:

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ic_menu_refresh"
    android:entries="@array/order" />

Menü kaynakları için Dokümanlar - http://developer.android.com/guide/topics/resources/menu-resource.html


2
Bu alt menüler harika bir ipucu! Bana saatler süren araştırma ve çalışma tasarrufu sağladı, teşekkürler!
damaxxed

7
Çeviricinin bir tıklamasına nasıl yanıt veririm?
gregm

2
Bu, Android 2.2 için çalışmaz. Uygulama kilitleniyor. Bir çözümün var mı?
tobias

3
ActionBarSherlock'u kullanın ... ActionBar'ı Android 2.2'de tekrar sunmamışlardı ve bu nedenle ActionBarSherlock, bu özellikleri geriye dönük olarak kullanmanıza izin veriyor. actionbarsherlock.com
edwoollard

4
@Sandeep Maram Sen tarafından spinner alabilirsiniz Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView()içinde onCreateOptionsMenu(). Ardından öğe seçme dinleyicisini ayarlayın.
Lahiru Chandima

34

Kesinlikle şimdiye kadar bulduğum en iyi ve en basit cevap burada .

Temel olarak, bu durumda özel düzene gerek yoktur. Sadece actonViewClass'ı ayarlayın:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

  <item android:id="@+id/spinner"
    yourapp:showAsAction="ifRoom"
    yourapp:actionViewClass="android.widget.Spinner" /> <== this is all that's required
</menu>

Ve sonra bunu her zamanki gibi onCreateOptionsMenu'da halledin:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    MenuItem item = menu.findItem(R.id.spinner);
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); // get the spinner
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(onItemSelectedListener); 

Bu, açık ara en basit ve en temiz çözümdür. Orijinal yazar François Poyer'a kredi.


Test edildi ve onaylandı.
Gus Costa

0

Yalnızca açılır menü olarak çalışacak

<?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/save_contact"-->
    <!--android:icon="@drawable/edit_new"-->
    <!--android:title="Save Contact"-->
    <!--app:showAsAction="never" />-->

    <item
        android:id="@+id/send_money"
        android:icon="@drawable/edit_new"
        android:title="Send Money"
        app:showAsAction="never" />

    <item
        android:id="@+id/request_money"
        android:icon="@drawable/edit_new"
        android:title="Request money"
        app:showAsAction="never" />

    <item
        android:id="@+id/recharge"
        android:icon="@drawable/edit_new"
        android:title="Recharge"
        app:showAsAction="never" />
</menu>

iç parça

setHasOptionsMenu (doğru)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.chat_details_menu, menu);


    super.onCreateOptionsMenu(menu, inflater);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.