Выпадающее заклинание вне панели действий? (IceCream Sandwich style, w / ActionBarSherlock)

Есть ли способ создать Dropdown Spinner для Android 2.3.3? Я использую ActionbarSherlock.

Вот пример того, что я имею в виду:

Введите описание изображения здесь

благодаря

Solutions Collecting From Web of "Выпадающее заклинание вне панели действий? (IceCream Sandwich style, w / ActionBarSherlock)"

В его нынешнем виде вам повезло. Это можно сделать с помощью ActionBarSherlock и работает с версиями до 4.0. Тем не менее, я не уверен на 100%, что Джейк Уортон хочет, чтобы мы использовали его так, потому что это не совсем «публичный api», AFAIK (я хотел спросить). В любом случае, вы должны сначала создать свой собственный класс для расширения класса ActionBarSherlock:

public class MyIcsSpinner extends IcsSpinner { public MyIcsSpinner(Context context, AttributeSet attrs) { super(context, attrs, com.actionbarsherlock.R.attr.actionDropDownStyle); } public MyIcsSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } } 

Чтобы включить его в макет:

 <com.blah.blah.blah.MyIcsSpinner android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:textAllCaps="true" android:background="@drawable/abs__spinner_ab_holo_light" android:textColor="#000000" android:gravity="center"/> 

Теперь вам нужно создать собственный SpinnerAdapter , и вам необходимо переопределить следующие методы, чтобы получить правильный внешний вид:

 @Override public View getView(int position, View convertView, ViewGroup parent) { final TextView filterName; if (convertView == null) { filterName = (TextView) layoutInflater.inflate(R.layout.filter_item, parent, false); } else { filterName = (TextView) convertView; } filterName.setText(getItem(position)); return filterName; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { final TextView filterName; if (convertView == null) { filterName = (TextView) layoutInflater.inflate(R.layout.sherlock_spinner_dropdown_item, parent, false); filterName.setEllipsize(TruncateAt.END); } else { filterName = (TextView) convertView; } filterName.setText(getItem(position)); return filterName; } 

YMMV, особенно. По темам.

Я столкнулся с той же проблемой, и мое решение довольно простое. (Я не использовал HoloEverywhere.)

Идея взята из проекта образца ABS, раскрывающееся меню которого можно отобразить на устройствах до 4.0, а также с помощью подменю. Итак, моя идея заключается в использовании подменю для маскировки значка с тремя точками. Вот код:

 @Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu sub = menu.addSubMenu("More"); sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); sub.getItem().setIcon(R.drawable.ic_menu); getSupportMenuInflater().inflate(R.menu.activity_main, sub); return true; } 

Так как меню «Дополнительно» не имеет атрибута MenuItem.SHOW_AS_ACTION_WITH_TEXT, значит, слово «Больше» (или все, что вы назвали) на самом деле не будет отображаться на панели действий. Единственный отображаемый значок R.drawable.ic_menu можно скопировать из папок с исходным кодом ABS / libable-xxdpi с именем «abs__ic_menu_moreoverflow_normal_holo_dark.png», который является так называемым трехточечным значком. И R.menu.activity_main – ваше меню xml.

Оно работает!