Un ejemplo de uso:
El Spinner tiene un tema oscuro, pero quiero que el menú desplegable tenga un tema claro.
fuente
Un ejemplo de uso:
El Spinner tiene un tema oscuro, pero quiero que el menú desplegable tenga un tema claro.
Android M
Como novedad en Android 6.0, Spinner ahora tiene el android:popupTheme
parámetro que le permite configurar el tema utilizado para la ventana emergente (menú desplegable).
Puedes usarlo como tal:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Eso funcionará en dispositivos con nivel de API 23+, pero no en dispositivos con una versión inferior de Android.
AppCompat
Aquí es donde entra AppCompat. Su implementación Spinner también es compatible 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. Lo haces haciendo que implemente la nueva ThemedSpinnerAdapter
interfaz.
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Spinner utiliza estos métodos para poder decirle al Adaptador qué tema utilizar para inflar las vistas desplegables. Para que esto sea lo más fácil posible, le hemos proporcionado una Helper
clase que puede conectar a su adaptador.
Esto significa que su adaptador se convierte en algo 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();
}
}
para la flecha giratoria que he usado,
android:backgroundTint="@color/white"
esto funcionará desde API 21para la vista giratoria y la vista desplegable:
para getView () el adaptador usará spinner_item.xml
para getDropDownView () el adaptador utilizará dropdwon_item.xml
entonces puedes usar tus diseños personalizados como quieras
Espero eso ayude
fuente
Solo como referencia, si usa
CursorAdapter
su implementación puede ser mucho más fácil, simplemente anulenewView()
, no es necesario anulargetDropDownView()
allí:fuente
puedes probar esto: en tu carpeta de diseño haz un spinner_item.xml:
luego usa este código:
fuente