Kürzlich habe ich von der Support-Bibliothek zu com.google.Android.material: Material: 1.0.0 gewechselt
Aber jetzt habe ich ein Problem, auf diesen Seiten gibt es einen Hinweis https://github.com/material-components/material-components-Android/blob/master/docs/getting-started.md
Hinweis: Wenn Sie ein Materialkomponenten-Design verwenden, wird eine benutzerdefinierte Ansicht aktiviert, die Standardkomponenten durch ihre Gegenstücke aus Material ersetzt. Derzeit werden Button XML-Komponenten nur durch MaterialButton ersetzt.
Und das Thema, das ich benutze
Theme.MaterialComponents.Light.NoActionBar
macht genau das, was in dieser Notiz steht, es ersetzt AlertDialog-Schaltflächen zu MaterialButtons, aber das Problem ist, dass MaterialButtons standardmäßig farbig hinterlegt sind und die Schaltflächen jetzt wie folgt aussehen:
Wie kann ich sie wieder randlos und ohne Hintergrund machen?
PS Ich verwende Alert Builder zum Erstellen von Alertdialogen:
Android.app.AlertDialog.Builder
Ich habe herausgefunden, was dieses Problem verursacht hat. Ich muss eine andere AlertDialog-Klasse verwenden:
androidx.appcompat.app.AlertDialog
Als ich darauf umgestellt habe, funktionierte alles wie erwartet. Hier habe ich die Lösung gefunden:
https://github.com/material-components/material-components-Android/issues/162
Wenn Sie androidx.appcompat.app.AlertDialog
Nicht verwenden möchten, können Sie einfach den Stil der Dialogschaltflächen neu definieren:
In Ihrer style.xml:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="Android:buttonBarButtonStyle">@style/DialogButton</item>
...
</style>
<style name="DialogButton" parent="Widget.MaterialComponents.Button.TextButton"/>
Wenn Sie das com.Android.support:design:28.0.0
Bibliothek, mit Android.support.v7.app.AlertDialog
funktioniert wie erwartet.
Bei Verwendung von com.google.Android.material:material:1.0.0
und androidx.appcompat.app.AlertDialog
können Sie jede Schaltfläche in der buttonBar
anpassen, indem Sie Widget.MaterialComponents.Button.TextButton
als übergeordnetes Element verwenden.
val builder: AlertDialog.Builder = AlertDialog.Builder(ContextThemeWrapper(context, R.style.AlertDialogTheme))
Verwenden Sie das Standardlayout oder fügen Sie ein benutzerdefiniertes Layout von builder.setView(R.layout.my_dialog)
hinzu.
In deinen Stilen:
<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>
Hier haben Sie eine andere Lösung mit MaterialComponents gefunden: 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>
Obwohl es für mich immer noch kein "beabsichtigtes Verhalten" ist.