Personalización del spinner de Actionbar
Estoy tratando de personalizar el androide actionbar spinner a algo que como la aplicación de Google Corrientes. Básicamente, sólo el "subtítulo" debe reflejar lo que elijo de la ruleta mientras que el "título" sigue siendo el mismo. Entiendo que un spinner personalizado necesita ser creado y tengo que sobrescribir el getView()
y getDropDownView()
. Pero estoy muy confundido aquí sobre cómo anular estos métodos correctamente. Pueden algunos por favor empujarme en la dirección correcta. Espero haber hecho mi pregunta clara.
La imagen de la imagen http://androidcowboy.com/wp-content/uploads/2012/12/google-currents-3a.jpg
- Cómo hacer en el artículo seleccionado no elegir automáticamente la primera entrada
- Configuración del Adaptador del Spinner de Android en el hilador
- Android: dos Spinner onItemSelected ()
- Spinner que agrega la matriz de la secuencia en la selección del artículo cómo puede conseguir el valor relacionado artículo en androide
- Refrescar un Spinner
A continuación se muestra mi código.
public class CustomSpinnerAdapter extends BaseAdapter { private LayoutInflater inflater; private final Context context; private final String[] dropDown; private final String mainText; private final String subText; public CustomSpinnerAdapter(Context context, String mainText, String subText,String[] dropDown) { inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.mainText=mainText; this.subText=subText; this.context = context; this.dropDown=dropDown; } @Override public int getCount() { // TODO Auto-generated method stub return 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View actionBarView = inflater.inflate(R.layout.custom_spinner, null); TextView textView = (TextView) actionBarView .findViewById(R.id.custom_spinner_textview); textView.setText(mainText); return actionBarView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View dropDownView = inflater.inflate(R.layout.custom_spinner, null); TextView dropDownTextView = (TextView) dropDownView .findViewById(R.id.custom_spinner_dropdown_textview); dropDownTextView.setText(dropDown[position]); return dropDownView; } }
- ¿Diversas vistas para el artículo del hilandero y del hilandero?
- Cómo ajustar contenido de texto en ActionBarSherlock spinner de navegación
- Spinner con par clave-valor
- Android Spinner con diferentes diseños para "drop down state" y "closed state"?
- Mostrar valor predeterminado en Spinner en android
- Android Spinner - ¿Cómo hacer que la vista desplegable sea transparente?
- SetOnItemClickListener no funciona con Spinner
- ¿Cómo cambiar el color de la fuente Spinner?
Lo solucioné.
Listado de mi clase de adaptador:
public class AdapterBaseMaps extends BaseAdapter { Context context; int layoutResourceId; ArrayList<ObjectLayers> data; LayoutInflater inflater; public AdapterBaseMaps(Context context, int textViewResourceId, ArrayList<ObjectLayers> data) { // super(a, textViewResourceId, data); this.data = data; inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.context = context; this.layoutResourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { View actionBarView = inflater.inflate(R.layout.ab_main_view, null); TextView title = (TextView) actionBarView .findViewById(R.id.ab_basemaps_title); TextView subtitle = (TextView) actionBarView .findViewById(R.id.ab_basemaps_subtitle); title.setText(context.getResources() .getString(R.string.label_cartravel)); subtitle.setText(data.get(position).getLayerName()); return actionBarView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View actionBarDropDownView = inflater.inflate( R.layout.ab_dropdown_view, null); TextView dropDownTitle = (TextView) actionBarDropDownView .findViewById(R.id.ab_basemaps_dropdown_title); dropDownTitle.setText(data.get(position).getLayerName()); return actionBarDropDownView; } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } }
Listado de ab_main_view.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/ab_basemaps_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:textSize="20sp" android:textColor="@color/White" /> <TextView android:id="@+id/ab_basemaps_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/ab_basemaps_title" android:text="TextView" android:textColor="@color/White" android:textSize="13sp" /> </RelativeLayout>
Listado de ab_dropdown_view.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/ab_basemaps_dropdown_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="20sp" android:padding="5dp" android:textColor="@color/White" /> </RelativeLayout>
La primera respuesta es útil, pero la subclase Adapter es innecesaria.
Defina XML como en la respuesta de @ user1624587 y luego simplemente haga referencia a ella en public boolean onCreateOptionsMenu(Menu menu)
:
ArrayAdapter<CharSequence> someAdapter = new ArrayAdapter<CharSequence>(context, R.layout.ab_main_view, android.R.id.text1, getResources().getStringArray(R.array.some_array)); someAdapter.setDropDownViewResource(R.layout.ab_dropdown); MenuItem item = menu.add("SomeTitle").setActionView(R.layout.some_spinner); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); //or whatever someSpinner = (someSpinner) item.getActionView(); someSpinner.setAdapter(someAdapter); ...etc
- Obtener fuerza de señal en Android
- Cómo obtener el desplazamiento de una vista dentro de un ScrollView?