web-dev-qa-db-ger.com

Schaltflächen des Warnungsdialogfelds für MaterialComponents

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

Wie kann ich sie wieder randlos und ohne Hintergrund machen?

PS Ich verwende Alert Builder zum Erstellen von Alertdialogen:

Android.app.AlertDialog.Builder
11
antanas_sepikas

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

17
antanas_sepikas

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"/>

1
Sylvain Lagache

Wenn Sie das com.Android.support:design:28.0.0 Bibliothek, mit Android.support.v7.app.AlertDialog funktioniert wie erwartet.

1

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>

 Screenshot

0
Rob

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.

0
fenceking