Comment puis-je changer la couleur du petit triangle dans le coin en bas à droite de la roulette, comme indiqué sur l'image? Il montre la couleur grise par défaut en ce moment. comme ça
Pour obtenir les images correctes, vous pouvez aller sur le site Android Asset Studio et choisir ensuite le Android Holo Colors Generator . Cela créera tous les actifs dont vous pourriez avoir besoin, y compris le "triangle". Il génère également les fichiers XML qui implémentent les modifications.
Voici les exemples de fichiers XML:
Couleur personnalisée:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="apptheme_color">#33b5e5</color>
</resources>
Style de spinner personnalisé:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="SpinnerAppTheme" parent="Android:Widget.Spinner">
<item name="Android:background">@drawable/apptheme_spinner_background_holo_light</item>
<item name="Android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>
<style name="SpinnerDropDownItemAppTheme" parent="Android:Widget.DropDownItem.Spinner">
<item name="Android:checkMark">@drawable/apptheme_btn_radio_holo_light</item>
</style>
</resources>
Thème d'application personnalisé:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="AppTheme" parent="@style/_AppTheme"/>
<style name="_AppTheme" parent="Theme.AppCompat.Light">
<item name="Android:spinnerStyle">@style/SpinnerAppTheme</item>
<item name="Android:spinnerDropDownItemStyle">@style/SpinnerDropDownItemAppTheme</item>
</style>
</resources>
Comme vous pouvez le constater, de nombreux tirages sont référencés par ces styles.
Voici celui spécifique au "triangle" que vous voulez changer:
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.Apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_enabled="false"
Android:drawable="@drawable/apptheme_spinner_disabled_holo_light" />
<item Android:state_pressed="true"
Android:drawable="@drawable/apptheme_spinner_pressed_holo_light" />
<item Android:state_pressed="false" Android:state_focused="true"
Android:drawable="@drawable/apptheme_spinner_focused_holo_light" />
<item Android:drawable="@drawable/apptheme_spinner_default_holo_light" />
</selector>
Je ne pense pas que ce soit le bon endroit pour répertorier tous les fichiers de manière complète, car vous pouvez tous les obtenir directement à partir de l'outil référencé.
Remarque: vous permet de thématiser l'ensemble de votre application afin que tous les filateurs soient mis à jour dans le style personnalisé.
Si vous cherchez un moyen rapide et sale de changer une seule spinner, consultez cet article référencé par Ricky dans son commentaire:
Je recommande quand même de le lire car il explique très bien le processus et vous aidera à comprendre le reste de ma réponse.
La solution la meilleure et la plus simple:
spinner.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);
Autre solution (merci à Simon) si vous ne voulez pas changer tous les Spinners:
Drawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable();
spinnerDrawable.setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);
if (Android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
spinner.setBackground(spinnerDrawable);
}else{
spinner.setBackgroundDrawable(spinnerDrawable);
}
À partir de Lollipop , vous pouvez définir la teinte de fond sur xml,
Android:backgroundTint="@color/my_color"
Je suis encore très nouveau sur le développement de Android, alors prenez peut-être mon conseil avec un grain de sel, mais aucune des réponses ici ne semble se rapporter à la mise en œuvre de spinner que j'utilisais.
Ce que je cherchais
Android:backgroundTint="@color/colorPrimary"
Voici l'intégralité de la balise <Spinner>
:
<Spinner
Android:id="@+id/coin_selector"
Android:layout_width="wrap_content"
Android:layout_height="21dp"
Android:layout_margin="26dp"
Android:layout_weight="1"
Android:textColor="#FFFFFF"
Android:dropDownSelector="@color/colorAccent"
Android:backgroundTint="@color/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="89dp"/>
Juste faire comme ça. Cela vous aidera à résoudre votre problème.
<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>
ou
Je viens de jeter un coup d'oeil sur la réponse que j'ai donnée pour une autre requête: Custom Spinner
Si vous avez minSdkVersion 21, c'est très simple:
<Spinner
style="@style/Widget.AppCompat.DropDownItem.Spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:backgroundTint="@color/triangleColor" />
où triangleColor est votre couleur.
Voici une autre façon de résoudre ce problème par programme également. (Testé sur API 19 et ci-dessus).
Utilisez ViewCompat
pour cela.
ViewCompat.setBackgroundTintList(spinner, ColorStateList.valueOf(your_color));
L'utilisation de spinner.setSupportBackgroundTintList
jette une erreur
La solution pour la version minimale du SDK 14. Vous pouvez utiliser AppCompatSpinner à partir de la bibliothèque de support:
AppCompatSpinner spinner = (AppCompatSpinner) view.findViewById(R.id.my_spinner);
spinner.setSupportBackgroundTintList(ContextCompat.getColorStateList(context, R.color.my_color));