¿Hay alguna manera de crear un Dropdown Spinner para Android 2.3.3? Estoy usando ActionbarSherlock.Dropdown Spinner fuera de la barra de acciones? (Estilo IceCream Sandwich, con ActionBarSherlock)
Aquí es un ejemplo de lo que quiero decir:
Gracias
¿Hay alguna manera de crear un Dropdown Spinner para Android 2.3.3? Estoy usando ActionbarSherlock.Dropdown Spinner fuera de la barra de acciones? (Estilo IceCream Sandwich, con ActionBarSherlock)
Aquí es un ejemplo de lo que quiero decir:
Gracias
Tal como está, estás de suerte. Se puede hacer con ActionBarSherlock y funciona con versiones anteriores a 4.0. Sin embargo, no estoy 100% seguro de que Jake Wharton querrá que lo usemos así, ya que no es exactamente una "aplicación pública", AFAIK (tengo la intención de preguntar). De todos modos, hay que crear primero su propia clase para extenderse desde la clase 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);
}
}
incluirlo en una presentación:
<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"/>
Ahora usted tiene que crear una costumbre SpinnerAdapter
, y lo que necesita para anular los siguientes métodos para obtener la apariencia adecuada:
@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. con respecto a los temas.
¡Gracias, funciona genial! –
@dmon El ancho desplegable no cambia después de la rotación del dispositivo. ¿Podrías sugerir sobre esto? –
He encontrado el mismo problema y mi solución es bastante simple. (No usé HoloEverywhere.)
La idea proviene del proyecto de ejemplo ABS, cuyo menú desplegable también se puede mostrar en dispositivos pre-4.0 utilizando un submenú. Entonces, mi idea es usar un submenú para disfrazar el ícono de 3 puntos. Aquí está el código:
@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;
}
Desde el menú "Más" no tiene un atributo MenuItem.SHOW_AS_ACTION_WITH_TEXT, por lo que la palabra "Más" (o lo que sea que creó) en realidad se no se mostrará en la barra de acción. El único ícono que se muestra R.drawable.ic_menu se puede copiar de las carpetas del código fuente ABS res/drawable-xxdpi denominadas "abs__ic_menu_moreoverflow_normal_holo_dark.png", que es el llamado ícono de 3 puntos. Y el R.menu.activity_main es su menú xml.
¡Funciona!
¿Qué hay de la lista desplegable [Spinner] (http://developer.android.com/reference/android/widget/Spinner.html) que ha estado presente desde la API 1? Los temas pueden ser diferentes, pero debería poder copiar la mayoría en un tema personalizado. – Sam
Se refiere a la apariencia de los rotativos ICS, donde "se despliegan" en lugar de ser un diálogo. – dmon