Czy istnieje sposób na stworzenie Dropdown Spinner dla systemu Android 2.3.3? Używam ActionbarSherlock.Dropdown Spinner poza Actionbar? (Styl IceCream Sandwich, w/ActionBarSherlock)
Oto przykład tego, co mam na myśli:
Dzięki
Czy istnieje sposób na stworzenie Dropdown Spinner dla systemu Android 2.3.3? Używam ActionbarSherlock.Dropdown Spinner poza Actionbar? (Styl IceCream Sandwich, w/ActionBarSherlock)
Oto przykład tego, co mam na myśli:
Dzięki
Jak się stoi, masz szczęście. Można to zrobić za pomocą ActionBarSherlock i działa z wersjami przed 4.0. Jednak nie jestem w 100% pewny, czy Jake Wharton będzie chciał, abyśmy go używali w ten sposób, ponieważ nie jest to dokładnie "public api", AFAIK (chciałem zapytać). Tak czy inaczej, trzeba najpierw stworzyć własną klasę do rozszerzenia z klasy 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);
}
}
umieścić go w układzie:
<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"/>
Teraz trzeba utworzyć niestandardowy SpinnerAdapter
i trzeba aby zastąpić następujące metody, aby uzyskać właściwy wygląd:
@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, esp. w odniesieniu do tematów.
Dzięki, działa świetnie! –
@dmon Szerokość rozwijania nie zmienia się po obrocie urządzenia. Czy możesz to zasugerować? –
Poznałem ten sam problem i moje rozwiązanie jest dość proste. (Nie użyłem HoloEverywhere.)
Pomysł pochodzi z przykładowego projektu ABS, którego rozwijane menu można również wyświetlać na urządzeniach z przed 4.0, a także za pomocą podmenu. Tak więc, moim pomysłem jest użycie podmenu do ukrycia ikony z trzema kropkami. Oto kod:
@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;
}
Ponieważ menu „Więcej” nie posiada atrybut MenuItem.SHOW_AS_ACTION_WITH_TEXT, więc słowo „Więcej” (lub cokolwiek nazwie) faktycznie nie być wyświetlane na pasku akcji. Jedynie wyświetlana ikona R.drawable.ic_menu może być kopiowana z folderów kodu źródłowego ABS/drawable-xxdpi o nazwie "abs__ic_menu_moreoverflow_normal_holo_dark.png", czyli tak zwanej ikony z trzema kropkami. A R.menu.activity_main jest twoim menu xml.
To działa!
jak o rozwijane [Spinner] (http://developer.android.com/reference/android/widget/Spinner.html), która już od 1 API? Tematy mogą być inne, ale powinieneś być w stanie skopiować większość do niestandardowego motywu. – Sam
Ma na myśli wygląd i sposób działania przędzarek ICS, w których "upuszczają", zamiast być dialogiem. – dmon