Есть ли способ создать Dropdown Spinner для Android 2.3.3? Я использую ActionbarSherlock.
Вот пример того, что я имею в виду:
Спасибо
Есть ли способ создать Dropdown Spinner для Android 2.3.3? Я использую ActionbarSherlock.
Вот пример того, что я имею в виду:
Спасибо
Как говорится, вам повезло. Это можно сделать с помощью ActionBarSherlock, и он работает с версиями до 4.0. Тем не менее, я не уверен на 100%, что Джейк Уортон захочет, чтобы мы использовали его таким образом, поскольку это не совсем «общедоступный API», насколько я знаю (я хотел спросить). В любом случае, вы должны сначала создать свой собственный класс, расширяющий класс 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 может быть скопирована из папки res/drawable-xxdpi исходного кода ABS с именем «abs__ic_menu_moreoverflow_normal_holo_dark.png», что является так называемой трехточечной иконкой. А R.menu.activity_main — это ваше меню xml.
Оно работает!