wiem, jest to stara sprawa, ale tylko w przypadku, gdy ktoś potknie się na nim (jak ja) i wciąż szuka kompletnej odpowiedzi, oto jak to zrobić za pomocą biblioteki zgodności, aby działała od wersji 7 (Android 2.1 Eclair) do wersji v19 (Android 4.4 KitKat):
W 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>
Korzystanie http://schemas.android.com/apk/res-auto
nazw aliasem jako yourapp
pozwala używać showAsAction atrybutów i actionViewClass, które nie istnieją w starszych wersjach Androida.
Następnie w kodzie aktywny:
@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 voilà!
Czy wiesz, jak to będzie działać w przypadku niestandardowej karty? Używam obrazów zamiast słów tekstowych do wyświetlenia w Spinner, więc linia 'SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource (getActivity(). GetActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R. layout.simple_spinner_dropdown_item); 'musi być inne dla niestandardowej karty. Nie mogę zrozumieć, jak. – Azurespot
po prostu wywołaj dowolny konstruktor, który masz na niestandardowej karcie. 'SpinnerAdapter mSpinnerAdapter = new MyCustomAdapter()' – Budius
Dzięki Budius, zrobiłem to, ale z jakiegoś powodu rozwijanie się nie dzieje. Pomyślałem, że to dlatego, że w moim adapterze niestandardowym brakuje 'android.R.layout.simple_spinner_dropdown_item' (ponieważ używa on wiersza Spinner jako ImageView, miejsca, w którym przechodzi tablica ze szufladami). Ale nie jestem pewien, czy to jest problem. Jeśli chcesz sprawdzić mój kod: http://stackoverflow.com/questions/30433501/custom-spinner-not-showing-dropdown-in-actionbar-icon Pytanie wciąż pozostaje bez odpowiedzi. Dzięki. – Azurespot