webentwicklung-frage-antwort-db.com.de

Verwendung und Formatierung des neuen AlertDialogs ab appCompat 22.1

Ich versuche, von Standard Android AlertDialog auf das neue in appCompat-22.1 enthaltene zu migrieren. Soweit ich weiß, müssen Sie nur das Paket Android.support.v7.app.AlertDialog Importieren, um dies zu tun um es zu benutzen.

Aber wie kann ich es stylen? Zum Beispiel die positiven/negativen Tastenfarben, die Titelfarbe, die Nachrichtenfarbe und die Hintergrundfarbe ändern?

145
ThanosFisherman

Beim Erstellen von AlertDialog können Sie ein zu verwendendes Design festlegen.

Beispiel - Erstellen des Dialogs

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

styles.xml - Benutzerdefinierter Stil

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="Android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="Android:background">#4CAF50</item>
</style>

Ergebnis

styled alertdialog

Bearbeiten

Um das Erscheinungsbild des Titels zu ändern, können Sie folgende Schritte ausführen. Fügen Sie zuerst einen neuen Stil hinzu:

<style name="MyTitleTextStyle">
    <item name="Android:textColor">#FFEB3B</item>
    <item name="Android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>

verweisen Sie anschließend einfach in Ihrem MyAlertDialogStyle auf diesen Stil:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    ...
    <item name="Android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>

Auf diese Weise können Sie über Android:textColorPrimary Ein anderes textColor für die Nachricht und über den Stil ein anderes für den Titel definieren.

432
reVerse

Um ein Thema für die gesamte Anwendung zu verwenden, und verwenden Sie nicht den zweiten Parameter, um Ihren Dialog zu gestalten

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/dialog</item>
    <item name="colorAccent">@color/accent</item>
</style>

<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/accent</item>
</style>

In meiner App, die einen Farbakzent im Thema verwendet, werden die Schaltflächen des alertDialog nicht mit dem Thema colorAccent angezeigt. Ich muss dem Thema einen Dialogstil hinzufügen.

57
neoteknic

Wenn Sie den neuen Android.support.v7.app.AlertDialog verwenden möchten und unterschiedliche Farben für die Schaltflächen sowie ein benutzerdefiniertes Layout haben möchten, schauen Sie unter my https://Gist.github.com/JoachimR/6bfbc175d5c8116d411e

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.custom_layout, null);

    initDialogUi(v);

    final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
            .setTitle(getString(R.string.some_dialog_title))
            .setCancelable(true)
            .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            doSomething();
                            dismiss();
                        }
                    })
            .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dismiss();
                        }
                    })
            .setView(v)
            .create();

    // change color of positive button         
    d.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setTextColor(getResources().getColor(R.color.colorPrimary));
        }
    });

    return d;
}

enter image description here

19
IHeartAndroid

Folgen Sie @reVerse Antwort, aber in meinem Fall hatte ich bereits einige Eigenschaften in meinem AppTheme wie

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="Android:textColor">#111</item>
    <item name="Android:textSize">13sp</item>
</style>

So wird mein Dialog aussehen
enter image description here

Ich habe es gelöst durch

1) Ändern Sie den Import von Android.app.AlertDialog bis Android.support.v7.app.AlertDialog
2) Ich überschreibe 2 Eigenschaft in AppTheme mit Nullwert

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="Android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="Android:background">#4CAF50</item>


    <item name="Android:textColor">@null</item>
    <item name="Android:textSize">@null</item>
</style>

.

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);

Hoffe es hilft einem anderen Volk

enter image description here

6
Phan Van Linh