studio sirve que programacion para móviles listas desplegables desarrollo curso configurar aplicaciones android appcompat android-appcompat

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); }

Un ejemplo de uso:

El Spinner tiene un tema oscuro, pero quiero que el menú desplegable tenga un tema claro.


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(); } }