Je fais une liste avec Chips. Je veux que ces puces puissent être sélectionnées, donc, jetez un œil à https://material.io/develop/Android/components/chip/ Je vois que je peux avoir une "puce de choix".
Comme je dois créer et ajouter dynamiquement, je dois configurer avec des couleurs spécifiques, des ondulations de couleurs, ...
Donc ce que je dois configurer c'est:
val chip = Chip(context, null, R.style.CustomChipChoice)
chip.isClickable = true
chip.isCheckable = true
chip.isCheckedIconVisible=false
chip.height = ScreenUtils.dpToPx(40)
chip.chipCornerRadius = (ScreenUtils.dpToPx(20)).toFloat()
chip.chipStrokeWidth = (ScreenUtils.dpToPx(2)).toFloat()
chip.setTextAppearanceResource(R.style.ChipTextStyle)
return chip
Ce que j'essaie avec R.style.CustomChipChoice
est:
Style CustomChipChoice
<style name="CustomChipChoice" parent="@style/Widget.MaterialComponents.Chip.Choice">
<item name="chipBackgroundColor">@color/background_color_chip_state_list</item>
<item name="chipStrokeColor">@color/background_color_chip_state_list</item>
<item name="rippleColor">@color/topic_social_pressed</item>
</style>
background_color_chip_state_list
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/topic_social_selected" Android:state_checked="true" />
<item Android:color="@color/topic_social_pressed" Android:state_pressed="true" />
<item Android:color="@color/topic_unselected_background" />
</selector>
stroke_color_chip_state_list
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/topic_social_pressed" Android:state_checked="true"/>
<item Android:color="@color/grey_material2" Android:state_checked="false"/>
</selector>
Comme vous pouvez le voir, je fais la puce, cliquable et vérifiable (cachant l'icône de vérification dont je n'ai pas besoin).
Mais quand je le teste, les couleurs ne sont pas définies. Les puces ressemblent simplement aux couleurs par défaut (échelle de gris)
Où puis-je appliquer ou comment ce style personnalisé?
P.S:
J'ai fait un test rapide, pour voir si mon CustomStyle était mal formé/etc ..
J'ai ajouté une vue via xml et j'ai parfaitement fonctionné ...
<Android.support.design.chip.Chip
Android:id="@+id/test"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
style="@style/CustomChipChoice"
Android:checkable="true"
Android:clickable="true"
app:checkedIconVisible="false"
Android:text="Chip Test"/>
Afin de définir le style de puce dans le code, vous pouvez essayer ce qui suit:
val chip = Chip(context)
val drawable = ChipDrawable.createFromAttributes(context, null, 0, R.style.Widget_MaterialComponents_Chip_Choice)
chip.setChipDrawable(drawable)
Utilisez simplement une mise en page xml (single_chip_layout.xml
) Pour définir l'unique Chip
avec votre style préféré:
<com.google.Android.material.chip.Chip
xmlns:Android="http://schemas.Android.com/apk/res/Android"
style="@style/CustomChipChoice"
...
/>
avec
<style name="CustomChipChoice" parent="@style/Widget.MaterialComponents.Chip.Choice">
...
</style>
Alors au lieu de val chip = Chip(context, null, R.style.CustomChipChoice)
utilisez
val chip = layoutInflater.inflate(R.layout.single_chip_layout, chipGroup, false) as Chip
En Java:
Chip chip =
(Chip) getLayoutInflater().inflate(R.layout.single_chip_layout, chipGroup, false);
CustomChipChoice
n'est pas un style, c'est juste une référence à un style. changez donc R.style.CustomChipChoice
à: R.attr.CustomChipChoice
val newChip = Chip(context, null, R.attr.CustomChipChoice)
mais avant cela, vous devez ajouter ce CustomChipChoice
in values.xml
fichier dans votre projet. pour ça. si votre projet n'a pas le values.xml
créez-le dans le répertoire values
.
puis ajoutez CustomChipChoice
comme ceci.
values.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="CustomChipChoice" format="reference" />
</resources>
maintenant en styles.xml
ajoutez votre style comme ceci.
styles.xml
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
.
.
<item name="CustomChipChoice">@style/CustomChipChoiceStyle</item>
.
.
</style>
maintenant que CustomChipChoice
attr fait référence à ce style et maintenant vous pouvez créer votre style personnalisé dans styles.xml
fichier.
styles.xml
<style name="CustomChipChoiceStyle" parent="@style/Widget.MaterialComponents.Chip.Action">
.
<item name="checkedIconVisible">false</item>
<item name="Android:focusable">true</item>
<item name="Android:clickable">true</item>
<item name="chipBackgroundColor">@color/colorWhite</item>
<item name="chipIcon">@drawable/ic_filter</item>
<item name="chipIconVisible">true</item>
<item name="textStartPadding">0dp</item>
<item name="textEndPadding">0dp</item>
.
.
<item name="Android:textAppearance">@style/ChipTextStyleAppearance</item>
</style>
si vous souhaitez modifier l'apparence du texte de la puce. voici ChipTextStyleAppearance
. vous pouvez l'ajouter comme ceci.
styles.xml
<style name="ChipTextStyleAppearance">
<item name="Android:fontFamily">@font/main_font</item>
<item name="Android:textSize">13dp</item>
<item name="Android:textColor">#ffffff</item>
</style>
n'oubliez pas d'ajouter le AppTheme
dans androidManifest.xml
sur application
ou activity
balises.
androidManifest.xml
<application
.
.
Android:theme="@style/AppTheme">
<activity
.
.
Android:theme="@style/AppTheme" />