Cómo mover la flecha giratoria de Android Spinner más cerca de la que está emitiendo texto

Necesito establecer la flecha de desplegable más cerca de su elemento de texto emisor en Spinner . ¿Cómo lograrlo?

 <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Introduzca aquí la descripción de la imagen

Puede solucionar esto definiendo un fondo personalizado en xml y, a continuación, estableciendo el margen de la flecha desde el lado derecho.

Comience por definir una lista de capas con un fondo de rectángulo y un objeto de mapa de bits para la flecha. Puede hacer que la flecha se alinee con el centro en el lado derecho estableciendo su gravedad, y puede moverla hacia el centro estableciendo su margen derecho a través del atributo android: "right". Tenga en cuenta que esto no moverá dinámicamente la flecha en función de la longitud del texto, pero debería ser un primer paso útil.

Spinner_background.xml

 <?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="@color/color_white" /> <corners android:radius="2.5dp" /> </shape> </item> <item android:right="64dp"> <bitmap android:gravity="right|center_vertical" android:src="@drawable/ic_spinner" </bitmap> </item> </layer-list> 

Esto se puede lograr creando un diseño personalizado para el elemento de hilandero seleccionado custom_spinner_item.xml. He añadido un TextView que muestra el elemento giratorio seleccionado actualmente. El icono de flecha se agrega en un ImageView. Puede utilizar cualquier icono. El icono de la flecha se mueve dependiendo de la longitud del texto que no sea alcanzada por la respuesta de TheoKanning . De hecho, puede modificar completamente el aspecto de su hiladora en este diseño.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/spinner_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:src="@mipmap/ic_arrow_down"/> </LinearLayout> 

Cree un adaptador giratorio personalizado e infle la vista anterior. También establezca el texto de su elemento de hilandero seleccionado de su lista reemplazando el método getView () predeterminado.

 public class CustomSpinnerAdapter extends ArrayAdapter<String> { LayoutInflater inflater; List<String> spinnerItems; public CustomSpinnerAdapter(Context applicationContext, int resource, List<String> spinnerItems) { super(applicationContext, resource, spinnerItems); this.spinnerItems = spinnerItems; inflater = (LayoutInflater.from(applicationContext)); } @Override public View getView(int i, View view, ViewGroup viewGroup) { view = inflater.inflate(R.layout.custom_spinner_item, null); TextView type = (TextView) view.findViewById(R.id.spinner_item_text); type.setText(spinnerItems.get(i)); return view; } } 

A continuación instancia la clase CustomSpinnerAdapter y establezca como el adaptador de su hilandero. SpinnerList es la lista de elementos que se mostrarán en la ruleta.

 CustomSpinnerAdapter customSpinnerAdapter = new CustomSpinnerAdapter(getContext(), android.R.layout.simple_spinner_item, spinnerList); spinner.setAdapter(customSpinnerAdapter); 
 1) Set the background of spinner to @null <Spinner android:id="@+id/spinner" android:background="@null" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 2) In the spinner adapter layout, create an Imageview to the right of Textview or whatever content is in there change the visibility of the imageview to "gone" 3)Override the onItemSelected method of the spinner in your activity, in the onItemSelected method, call the Imageview ImageView downArrow = (ImageView) view.findViewById(R.id.down_arrow); change its visibility to "visible" 
  • Cerrar Spinner en clic fuera de Spinner
  • Android - ¿Cómo puedo cambiar un valor de spinner sin activar setOnItemSelectedListener
  • Populating Android Spinner con la lista de objetos
  • Obtener el valor String de un Spinner respaldado por CursorAdapter de la consulta SQL en Android
  • ¿Qué atributo de estilo tiene que ser cambiado para spinner dropdownitem?
  • Manejo de la orientación de la pantalla del androide para spinner
  • ¿Cómo puedo agregar elementos a una ruleta en Android?
  • Diferencia entre android.R.layout.simple_spinner_dropdown_item y android.R.layout.simple_spinner_item
  • Creación de un setError () para el Spinner
  • Androide spinner evento de incendio cuando la misma selección de artículo se hace
  • Android onListItemClick no funciona cuando los hilanderos se encuentran dentro de listrow
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.