web-dev-qa-db-fra.com

Boutons de dialogue d'alerte de thème MaterialComponents

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:  enter image description here

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
11
antanas_sepikas

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

17
antanas_sepikas

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>

 Screenshot

0
Rob

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.

0
fenceking