Tôi biết đây là một câu hỏi cũ, nhưng chỉ trong trường hợp một người nào đó tình cờ trên đó (như tôi đã làm) và vẫn tìm kiếm một câu trả lời hoàn chỉnh, đây là cách để làm điều đó bằng cách sử dụng thư viện tương thích, để nó hoạt động từ v7 (Android 2.1 Eclair) đến v19 hiện tại (Android 4.4 KitKat):
Trong menu_layout.xml:
<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" />
</menu>
Sử dụng http://schemas.android.com/apk/res-auto
namespace aliased như yourapp
phép bạn sử dụng các thuộc tính showAsAction và actionViewClass không tồn tại trên các phiên bản cũ của Android.
Sau đó trong mã hoạt động của bạn:
@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); // set the adapter to provide layout of rows and content
spinner.setOnItemSelectedListener(onItemSelectedListener); // set the listener, to perform actions based on item selection
Et thì đấy!
Nguồn
2014-04-07 00:22:26
Bất kỳ ý tưởng nào về cách này sẽ hoạt động đối với bộ điều hợp tùy chỉnh? Tôi đang sử dụng một hình ảnh thay vì từ văn bản để hiển thị trong Spinner, do đó, dòng 'SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource (getActivity(). GetActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R. layout.simple_spinner_dropdown_item); 'phải khác nhau đối với bộ điều hợp tùy chỉnh. Không thể hiểu được làm thế nào. – Azurespot
chỉ cần gọi bất kỳ hàm tạo nào bạn có trên bộ điều hợp tùy chỉnh của mình. 'SpinnerAdapter mSpinnerAdapter = new MyCustomAdapter()' – Budius
Cảm ơn Budius, tôi đã làm điều đó, nhưng vì một lý do nào đó, trình đơn thả xuống không xảy ra. Tôi nhận ra rằng vì 'android.R.layout.simple_spinner_dropdown_item' bị thiếu trong bộ điều hợp tùy chỉnh của tôi (vì nó sử dụng một hàng Spinner như ImageView, một nơi mà mảng drawables đi vào). Nhưng không chắc đó có phải là vấn đề không. Nếu bạn muốn kiểm tra mã của tôi: http://stackoverflow.com/questions/30433501/custom-spinner-not-showing-dropdown-in-actionbar-icon Câu hỏi vẫn chưa được trả lời. Cảm ơn. – Azurespot