Cambie el color de fondo del spinner pero mantenga la flecha

He leído varias cosas sobre él pero no puedo encontrar lo que necesito. Quiero mantener la flecha gris pero quiero quitar la barra horizontal del estilo predeterminado y tener un fondo blanco. ¿Tienes alguna idea de cómo puedo hacer esto?

Aquí está lo que tengo ahora (estilo del hilandero por defecto):

Introduzca aquí la descripción de la imagen

Esto es lo que quiero:

Introduzca aquí la descripción de la imagen

Para el registro, encontré una solución fácil: Envuelva su hilandero en un diseño relativo y añada una imagen:

  <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/borderbottom_white"<!-- white background with bottom border --> android:layout_marginTop="15dp" > <Spinner android:id="@+id/postfield_category" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="16sp" android:background="@null" android:minHeight="0dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:src="@drawable/arrowspinner" /> </RelativeLayout> 

Hice una pequeña modificación basada en la respuesta de @Mansur Khan.

No tenemos que añadir un ImageView en este caso porque el fondo de spinner es transparente ya. Compruebe tan el código abajo:

  <RelativeLayout android:layout_width="match_parent" android:layout_height="70dp" android:background="@drawable/bg_spinner"> <Spinner style="@style/Widget.AppCompat.DropDownItem.Spinner" android:layout_width="match_parent" android:layout_height="70dp" android:id="@+id/sign_up_country" /> </RelativeLayout> 

Aquí está la captura de pantalla

Antes de: Introduzca aquí la descripción de la imagen

Después: Introduzca aquí la descripción de la imagen

Bg_spinner.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="8dp" android:bottom="8dp"> <shape> <solid android:color="@android:color/white" /> <corners android:radius="2dp"/> <stroke android:width="1dp" android:color="#EBEBEB" /> <padding android:top="16dp" android:bottom="16dp" android:left="8dp" android:right="16dp"/> </shape> </item> </layer-list> 

Una solución sencilla que no requiere que cree su propio dibujable para la flecha es envolver la ruleta con un RelativeLayout y establecer el color de fondo en RelativeLayout , no en el spinner:

 <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#f00" > <Spinner android:id="@+id/spinner1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> 

Utilizar esta:

 yourspinner.setOnItemSelectedListener(this); @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ((TextView) yourspinner.getSelectedView()).setBackgroundColor(getResources() .getColor(R.color.your_color)); } 

Y su clase debe implementar OnItemSelectedListener.

Una buena manera de personalizar los hiladores y cualquier otro control de Android es usar el sitio Android Asset Studio y elegir el generador de colores Android Holo . Esto creará todos los activos que pueda necesitar, incluyendo el "subrayado". También genera los archivos XML que implementan los cambios.

Una vez que descargue el archivo ZIP de ese sitio, simplemente copie las imágenes y los archivos XML en su proyecto.

A continuación, puede editar los archivos de imagen necesarios para eliminar el subrayado. Son archivos de 9 parches, llamados:

  • Apptheme_spinner_default_holo_light.9.png
  • Apptheme_spinner_disabled_holo_light.9.png
  • Apptheme_spinner_focused_holo_light.9.png
  • Apptheme_spinner_pressed_holo_light.9.png

Para una explicación más completa del proceso y para ver algunos de los archivos XML de ejemplo, consulte mi respuesta relacionada:

  • Cambiar el color del pequeño triángulo en spinner en android

Aquí está el código de la ruleta personalizada. Por favor, echa un vistazo y dímelo. Aún no he probado esto. Así que por favor, infórmeme después de comprobar esto si soluciona su problema.

 <Spinner android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/spinner_background" android:gravity="center" android:paddingRight="10dp" android:spinnerMode="dropdown" android:textColor="your text color" android:textSize="your text size" /> 

Aquí está el drawable (spinner_background.xml) para crear el fondo de spinner.

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="border color" /> <corners android:radius="3dp" /> </shape> </item> <item android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp"> <shape android:shape="rectangle" > <solid android:color="@android:color/white" /> <corners android:radius="3dp" /> </shape> </item> </layer-list> 

Editar:

Compruebe por favor este acoplamiento que le da una idea a hacer. Personalizar el fondo de spinner

O

Usted puede hacer algo como esto.

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="spinner background image"> <Spinner android:layout_width="match_parent" android:layout_height="match_parent" android:background="@null"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:src="arrow image" /> </RelativeLayout> 

Debajo de la disposición creará un fondo en el hilandero con color del deseo

  <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight=".6" android:background="@drawable/edit_text_rounded_shape" android:gravity="center|center_vertical"> <Spinner android:id="@+id/spinerComanyName" android:layout_width="0dp" android:layout_height="wrap_content" android:padding="4dp" android:layout_weight=".6" android:layout_gravity="center" android:entries="@array/spinner_item" android:spinnerMode="dropdown" android:theme="@style/Spinner" /> </LinearLayout> <style name="Spinner"> <!-- Used for the bottom line when not selected / focused --> <item name="colorControlNormal">@color/black</item> <item name="colorControlActivated">@color/colorPrimary</item> <!-- colorControlActivated & colorControlHighlight use the colorAccent color by default --> </style> 

Edit_text_rounded_shape que proporcionan el color de fondo y la esquina redondeada

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="@color/white"/> <stroke android:color="@color/grey"/> <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/> </shape> 

  android:layout_alignParentRight="true" android:layout_width="@dimen/spinner_width" android:layout_height="wrap_content" android:id="@+id/spnLocation" android:entries="@array/labelFamily" android:layout_centerVertical="true" android:backgroundTint="@color/color_gray" 

Este trabajo para mi

Hola en lugar de envolver el componente Spinner alrededor de Layouts de los padres como LinearLayout, RelativeLayout, etc., lo que aumenta el análisis de diseño, simplemente crea un drawable llamado spinner_bg.xml bajo una carpeta dibujable.

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <bitmap android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="right" android:src="@drawable/icn_dropdown_arw" /> </item> </layer-list> 

Establecer spinner_bg como el fondo de su hilandero y funciona como encanto:

 <Spinner android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" android:background="@drawable/spinner_bg" /> 
  • Populating Android Spinner con la lista de objetos
  • Ajuste del valor de la hiladora dinámicamente
  • Por que enNo se selecciona ningunoSeleccionado
  • Actionbarsherlock IcsSpinner - el ancho siempre se ajusta a los elementos más amplios
  • Añade más espacio entre los elementos de Android Spinner sin estilo personalizado?
  • Rellenando Spinner con SimpleAdapter en Android
  • Spinner setonitemselectedlistener no se llama
  • Android - Spinner + setOnClickListener
  • Alinear una ruleta subrayada en la misma línea junto al texto de edición
  • Cómo configurar el color de texto de los elementos en Spinner Android
  • Org.json.JSONArray no se puede convertir en JSONObject (Populating spinner from webservice)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.