android - studio - Cambiar el color de fondo del girador pero mantener la flecha
cambiar color android studio (10)
Aquí está el código de spinner personalizado. Por favor compruébalo y dime. Todavía no he probado esto. Así que por favor infórmeme después de verificar esto si resuelve su problema.
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));
}
Aquí está el drawable (spinner_background.xml) para crear el fondo de spinner.
<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" />
Editar:
por favor revisa este enlace que te da una idea para hacer. Personaliza el fondo del girador
O
puedes hacer algo como esto
<?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>
He leído varias cosas al respecto pero no puedo encontrar lo que necesito. Quiero mantener la flecha gris, pero quiero eliminar la barra horizontal del estilo predeterminado y tener un fondo blanco. ¿Tienes alguna idea de cómo puedo hacer esto?
Esto es lo que tengo ahora (estilo de ruleta predeterminado):
Esto es lo que quiero:
Creo que la mejor manera sin hacer diseños complejos es esta:
¡Usa este xml para tu fondo de spinner y estás listo para empezar!
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"
Hice una pequeña modificación basada en la respuesta de @Mansur Khan.
No tenemos que agregar un ImageView en este caso porque el spinner ya tiene una flecha triangular. Por lo tanto, verifique el código a continuación:
<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
Hola, en lugar de incluir el componente Spinner en los diseños principales, como LinearLayout, RelativeLayout, etc., que aumenta el análisis del diseño, simplemente crea un dibujante llamado spinner_bg.xml en la carpeta dibujable.
<?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>
Establece spinner_bg como fondo de tu spinner y funciona como encanto:
<?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>
Para el registro, encontré una solución fácil: Envuelva su spinner en un diseño relativo y agregue una imagen:
<?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 buena forma de personalizar spinners y cualquier otro control de Android es usar el sitio de Android Asset Studio y elegir el generador de colores Holo de Android . Esto creará todos los activos que pueda necesitar, incluido el "subrayado". También genera los archivos XML que implementan los cambios.
Una vez que descargue el archivo ZIP de ese sitio, solo copie las imágenes y los archivos XML en su proyecto.
Luego puede editar los archivos de imagen requeridos 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 obtener una explicación más completa del proceso y ver algunos de los archivos XML de muestra, consulte mi respuesta relacionada:
- Cambiar el color del triángulo pequeño en el spinner en Android
Una solución simple que no requiere que crees tu propio drawable para la flecha es envolver el spinner con RelativeLayout
, y establecer el color de fondo en el RelativeLayout
, no en el spinner:
<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>
Utilizar esta:
<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>
y tu clase debería implementar OnItemSelectedListener.
debajo del diseño se creará un fondo en el panel giratorio con la flecha desplegable del color del deseo
<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>
edit_text_rounded_shape que proporciona el color de fondo y la esquina redondeada
<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>
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:background="@drawable/spinner_bg" />
este trabajo para mi