Hoàn toàn là câu trả lời tốt nhất và đơn giản nhất mà tôi tìm thấy cho đến nay là ở đây .
Về cơ bản, không cần bố cục tùy chỉnh trong trường hợp này. Chỉ cần đặt actonViewClass:
<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>
Và sau đó xử lý nó trong onCreateOptionsMenu, như thường lệ:
@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);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(onItemSelectedListener);
Đây là giải pháp đơn giản và sạch sẽ nhất. Tín dụng cho François Poyer, tác giả gốc.