Récemment, je suis passé de la bibliothèque de support à com.google.Android.material: material: 1.0.0
Mais maintenant j'ai un problème, dans cette page il y a une note https://github.com/material-components/material-components-Android/blob/master/docs/getting-started.md
Remarque: l'utilisation d'un thème Composants de matériaux active un inflateur de vue personnalisé qui remplace les composants par défaut par leurs équivalents de matériau. Actuellement, cela ne remplace que les composants Button XML par MaterialButton.
Et le thème que j'utilise
Theme.MaterialComponents.Light.NoActionBar
fait exactement ce qui est dit dans cette note, il remplace les boutons AlertDialog en MaterialButtons mais le problème est que par défaut les MaterialButtons sont en fond coloré et que les boutons ressemblent à ceci:
Comment puis-je les rendre sans frontières et sans arrière-plan?
PS J'utilise le générateur d'alertes pour créer des dialogues d'alerte:
Android.app.AlertDialog.Builder
J'ai compris ce qui causait ce problème. J'ai besoin d'utiliser différentes classes AlertDialog:
androidx.appcompat.app.AlertDialog
Quand je suis passé à cela, tout a commencé à fonctionner comme prévu. Voici où j'ai trouvé la solution:
https://github.com/material-components/material-components-Android/issues/162
Lorsque vous utilisez com.google.Android.material:material:1.0.0
et androidx.appcompat.app.AlertDialog
, vous pouvez personnaliser chaque bouton de la buttonBar
en utilisant Widget.MaterialComponents.Button.TextButton
en tant que parent.
val builder: AlertDialog.Builder = AlertDialog.Builder(ContextThemeWrapper(context, R.style.AlertDialogTheme))
Utilisez la disposition par défaut ou ajoutez une personnalisation de builder.setView(R.layout.my_dialog)
Dans tes styles:
<style name="AlertDialogTheme" parent="Theme.MaterialComponents.Light.Dialog.Alert">
<item name="buttonBarPositiveButtonStyle">@style/Alert.Button.Positive</item>
<item name="buttonBarNegativeButtonStyle">@style/Alert.Button.Neutral</item>
<item name="buttonBarNeutralButtonStyle">@style/Alert.Button.Neutral</item>
</style>
<style name="Alert.Button.Positive" parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/transparent</item>
<item name="rippleColor">@color/colorAccent</item>
<item name="Android:textColor">@color/colorPrimary</item>
<item name="Android:textSize">14sp</item>
<item name="Android:textAllCaps">false</item>
</style>
<style name="Alert.Button.Neutral" parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/transparent</item>
<item name="rippleColor">@color/colorAccent</item>
<item name="Android:textColor">@color/gray_dark</item>
<item name="Android:textSize">14sp</item>
<item name="Android:textAllCaps">true</item>
</style>
Vous avez trouvé une autre solution à cet égard en utilisant MaterialComponents ici: https://issuetracker.google.com/issues/116861837#comment9
<style name="Theme.Custom.Material.Alert.Dialog.Light" parent="Theme.MaterialComponents.Light.Dialog.Alert">
<item name="materialButtonStyle">@style/Widget.AppCompat.Button.Borderless</item>
</style>
<style name="Theme.Custom.Material.Base.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="Android:dialogTheme">@style/Theme.Custom.Material.Alert.Dialog.Light</item>
<item name="Android:alertDialogTheme">@style/Theme.Custom.Material.Alert.Dialog.Light</item>
....
</style>
Bien que ce ne soit toujours pas le "comportement souhaité" pour moi.