Dropdown Spinner вне панели действий? (Стиль IceCream Sandwich, с ActionBarSherlock)

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

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

Спасибо

 dmon25 апр. 2012 г., 23:11
Он имеет в виду внешний вид вертушек ICS, где они «выпадают» вместо того, чтобы быть диалогом.
 Sam25 апр. 2012 г., 23:09
Как насчет выпадающеговолчок что было вокруг с API 1? Темы могут быть разными, но вы сможете скопировать большинство из них в пользовательскую тему.

Ответы на вопрос(2)

и мое решение довольно простое. (Я не использовал 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 res / drawable-xxdpi с именем «abs__ic_menu_moreoverflow_normal_holo_dark.png», который представляет собой так называемый значок с 3 точками. И R.menu.activity_main - это ваше меню xml.

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

Решение Вопроса

тебе повезло. Это можно сделать с помощью 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, особенно по темам.

 Ramesh Akula07 июл. 2014 г., 14:19
@dmon Ширина раскрывающегося списка не изменяется после вращения устройства. Не могли бы вы предложить по этому поводу?
 Prateek Thakur27 июл. 2012 г., 13:38
Спасибо, отлично работает!

Ваш ответ на вопрос