android - sirve - ¿Cómo configuro un tema diferente para el menú desplegable de un Spinner?
para que sirve spinner en android studio (4)
Solo como referencia, si usa el
CursorAdapter
su implementación puede ser mucho más fácil, simplemente anule
newView()
, no es necesario anular
getDropDownView()
allí:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
para
la flecha del spinner
He usado
android:backgroundTint="@color/white"
esto funcionará desde API 21
para la vista giratoria y la vista desplegable:
ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);
areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);
para getView () el adaptador usará spinner_item.xml
para getDropDownView () el adaptador usará dropdwon_item.xml
entonces puedes usar tus diseños personalizados como quieras
Espero eso ayude
puedes probar esto: en tu carpeta de diseño crea un spinner_item.xml:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:padding="10dp"
android:background = "#ffffff"
android:textColor="@color/primary_text"
android:textSize="@dimen/text_size_normal" />
luego usa este código:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);
Android M
Nuevo en Android 6.0, Spinner ahora tiene el parámetro
android:popupTheme
que le permite configurar el tema utilizado para la ventana emergente (desplegable).
Puedes usarlo así:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Eso funcionará en dispositivos que ejecutan API nivel 23+, pero no en dispositivos que ejecutan una versión inferior de Android.
AppCompat
Aquí es donde entra AppCompat. Su implementación de Spinner también admite
popupTheme
, pero es un poco más complicado hacerlo bien.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Después de eso, debe actualizar su adaptador para poder trabajar con AppCompat.
Para ello, debe implementar la nueva interfaz
ThemedSpinnerAdapter
.
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Spinner utiliza estos métodos para poder indicarle al Adaptador qué tema usar para inflar las vistas desplegables.
Para que esto sea lo más fácil posible, le hemos dado una clase de
Helper
que puede conectar a su adaptador.
Esto significa que su adaptador se convierte en algo así como:
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
private final ThemedSpinnerAdapter.Helper mDropDownHelper;
public MyAdapter(Context context) {
mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
// Inflate the drop down using the helper''s LayoutInflater
LayoutInflater inflater = mDropDownHelper.getDropDownViewInflater();
view = inflater.inflate(R.layout.my_dropdown, parent, false);
}
// ...
return view;
}
@Override
public void setDropDownViewTheme(Theme theme) {
mDropDownHelper.setDropDownViewTheme(theme);
}
@Override
public Theme getDropDownViewTheme() {
return mDropDownHelper.getDropDownViewTheme();
}
}