So ändern Sie das Thema für AlertDialog

242

Ich fragte mich, ob mir jemand helfen könnte. Ich versuche, einen benutzerdefinierten AlertDialog zu erstellen. Zu diesem Zweck habe ich die folgende Codezeile in styles.xml hinzugefügt

<resources>
 <style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
  <item name="android:windowBackground">@drawable/color_panel_background</item>
 </style>
</resources>
  • color_panel_background.9.png befindet sich im Zeichenordner. Dies ist auch im Android SDK res-Ordner verfügbar.

Das Folgende ist die Hauptaktivität.

package com.customdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class CustomDialog extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setTheme(R.style.CustomAlertDialog);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("HELLO!");
        builder .setCancelable(false)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //dialog.cancel();
           }
       });

        AlertDialog alertdialog = builder.create();
        alertdialog.show();
    }
}

Um das Thema auf einen AlertDialog anzuwenden, musste ich das Thema auf den aktuellen Kontext einstellen.

Ich kann jedoch nicht scheinen, dass die App angepassten AlertDialog anzeigt. Kann mir jemand dabei helfen?

Min Soo Kim
quelle
Ich fand dieses Repo auf Github sehr hilfreich: github.com/StylingAndroid/AlertDialog
Esilver

Antworten:

363

In Dialog.java (Android src) wird ein ContextThemeWrapper verwendet. Sie können also die Idee kopieren und Folgendes tun:

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));

Und dann stylen Sie es wie Sie wollen:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AlertDialogCustom" parent="@android:style/Theme.Dialog">
        <item name="android:textColor">#00FF00</item>
        <item name="android:typeface">monospace</item>
        <item name="android:textSize">10sp</item>
    </style>
</resources>
Arve Waltin
quelle
62
Verwenden Sie nicht @android: style / AlertDialog. Es ist nicht in der öffentlichen API. Infolgedessen stürzt Android 2.3.3 beim Erstellen des Builders ab.
Catalin Morosan
18
@kaciula Ist @android:style/Theme.Dialogöffentlich? Kann es stattdessen verwendet werden?
HRJ
24
Ja. Es ist öffentlich. Eine Liste aller öffentlichen Stile finden Sie unter developer.android.com/reference/android/R.style.html . Beachten Sie, dass sich die Benennung in der API von der im Code verwendeten unterscheidet. Es gibt ein '_' anstelle von "." (Theme_Dialog)
Catalin Morosan
2
Wo soll ich die obige XML-Datei platzieren?
Chaitanya Chandurkar
3
Für ein neueres Thema, das Teil der Kompatibilitätsthemen ist, würde ich empfehlen, den Theme.AppCompat.Light.Dialog.AlertStil als übergeordnetes Element Ihres benutzerdefinierten Stils zu verwenden. Aber wenn Sie dies tun, stellen Sie sicher, dass Sie importieren import android.support.v7.app.AlertDialog; und nichtimport android.app.AlertDialog
w3bshark
93

Ich hatte dieses AlertDialogthemenbezogene Problem mit SDK 1.6, wie hier beschrieben: http://markmail.org/message/mj5ut56irkrkc4nr

Ich habe das Problem folgendermaßen gelöst:

  new AlertDialog.Builder(
  new ContextThemeWrapper(context, android.R.style.Theme_Dialog))

Hoffe das hilft.

chee
quelle
2
Es gibt mehrere relevante Themen; in meinem Fall passte android.R.style.Theme_Holo_Dialog besser. Toller Tipp.
Johnny O
78

Ich habe in meinem Blog einen Artikel darüber geschrieben, wie das Layout eines AlertDialogs mit Dateien im XML-Stil konfiguriert wird. Das Hauptproblem besteht darin, dass Sie unterschiedliche Stildefinitionen für unterschiedliche Layoutparameter benötigen. Hier ist ein Boilerplate, das auf dem AlertDialog-Stil von Holo Light Platform Version 19 basiert, für eine Stildatei, die eine Reihe von Standardlayoutaspekten wie Textgrößen und Hintergrundfarben abdecken soll.

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    ...
    <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
    <item name="android:alertDialogStyle">@style/MyAlertDialogStyle</item>
    ...
</style>

<style name="MyBorderlessButton">
    <!-- Set background drawable and text size of the buttons here -->
    <item name="android:background">...</item>
    <item name="android:textSize">...</item>
</style>

<style name="MyButtonBar">
    <!-- Define a background for the button bar and a divider between the buttons here -->
    <item name="android:divider">....</item>
    <item name="android:dividerPadding">...</item>
    <item name="android:showDividers">...</item>
    <item name="android:background">...</item>
</style>

<style name="MyAlertDialogTitle">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
</style>

<style name="MyAlertTextAppearance">
    <!-- Set text size and color of title and message here -->
    <item name="android:textSize"> ... </item>
    <item name="android:textColor">...</item>
</style>

<style name="MyAlertDialogTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@style/MyAlertDialogTitle</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:textAppearanceMedium">@style/MyAlertTextAppearance</item>
    <!-- If you don't want your own button bar style use
            @android:style/Holo.Light.ButtonBar.AlertDialog
            and
            ?android:attr/borderlessButtonStyle
         instead of @style/MyButtonBar and @style/MyBorderlessButton -->
    <item name="android:buttonBarStyle">@style/MyButtonBar</item>
    <item name="android:buttonBarButtonStyle">@style/MyBorderlessButton</item>
</style>

<style name="MyAlertDialogStyle">
    <!-- Define background colors of title, message, buttons, etc. here -->
    <item name="android:fullDark">...</item>
    <item name="android:topDark">...</item>
    <item name="android:centerDark">...</item>
    <item name="android:bottomDark">...</item>
    <item name="android:fullBright">...</item>
    <item name="android:topBright">...</item>
    <item name="android:centerBright">...</item>
    <item name="android:bottomBright">...</item>
    <item name="android:bottomMedium">...</item>
    <item name="android:centerMedium">...</item>
</style>
Nantoka
quelle
2
Darf ich Sie fragen, warum wir beide Stil und Thema für die AlertDialog-Anpassung benötigen? Vielen Dank! @nantoka
brainvision
2
@brainvision Mein Blogeintrag enthält die Details, aber kurz gesagt, das Layout eines AlertDialogs stammt aus zwei verschiedenen Klassen (Dialog und AlertController), die unterschiedliche Layoutparameterdateien verwenden.
Nantoka
46
 <style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">@color/teal</item>
</style>





new AlertDialog.Builder(new ContextThemeWrapper(context,R.style.AlertDialogCustom))
            .setMessage(Html.fromHtml(Msg))
            .setPositiveButton(posBtn, okListener)
            .setNegativeButton(negBtn, null)
            .create()
            .show();
Sai Gopi N.
quelle
3
Einfachste und doch schnellste Lösung!
FonzTech
4
OK, wie wäre es mit einem Attribut, um es global in "AppTheme" zu deklarieren?
Deadfish
2
Dies hat mir geholfen, die Farben der Schaltflächen des Dialogfelds zu ändern.
icarovirtual
1
Danke mein Kumpel, du hast meine Woche gerettet !!
Clifton Steenkamp
31

Ich hatte damit zu kämpfen - Sie können den Hintergrund des Dialogfelds mit android:alertDialogStyle="@style/AlertDialog"Ihrem Thema gestalten, aber es ignoriert alle Texteinstellungen, die Sie haben. Wie @rflexor oben sagte, kann dies nicht mit dem SDK vor Honeycomb durchgeführt werden (gut, Sie könnten es verwenden Reflection).

Kurz gesagt, meine Lösung bestand darin, den Hintergrund des Dialogfelds wie oben beschrieben zu gestalten und dann eine benutzerdefinierte Titel- und Inhaltsansicht festzulegen (unter Verwendung von Layouts, die mit denen im SDK identisch sind).

Mein Wrapper:

import com.mypackage.R;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAlertDialogBuilder extends AlertDialog.Builder {

    private final Context mContext;
    private TextView mTitle;
    private ImageView mIcon;
    private TextView mMessage;

    public CustomAlertDialogBuilder(Context context) {
        super(context);
        mContext = context; 

        View customTitle = View.inflate(mContext, R.layout.alert_dialog_title, null);
        mTitle = (TextView) customTitle.findViewById(R.id.alertTitle);
        mIcon = (ImageView) customTitle.findViewById(R.id.icon);
        setCustomTitle(customTitle);

        View customMessage = View.inflate(mContext, R.layout.alert_dialog_message, null);
        mMessage = (TextView) customMessage.findViewById(R.id.message);
        setView(customMessage);
    }

    @Override
    public CustomAlertDialogBuilder setTitle(int textResId) {
        mTitle.setText(textResId);
        return this;
    }
    @Override
    public CustomAlertDialogBuilder setTitle(CharSequence text) {
        mTitle.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(int textResId) {
        mMessage.setText(textResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(CharSequence text) {
        mMessage.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(int drawableResId) {
        mIcon.setImageResource(drawableResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(Drawable icon) {
        mIcon.setImageDrawable(icon);
        return this;
    }

}

alert_dialog_title.xml (aus dem SDK entnommen)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <LinearLayout
            android:id="@+id/title_template"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="9dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip">

            <ImageView android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:paddingTop="6dip"
                android:paddingRight="10dip"
                android:src="@drawable/ic_dialog_alert" />
            <TextView android:id="@+id/alertTitle"
                style="@style/?android:attr/textAppearanceLarge"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <ImageView android:id="@+id/titleDivider"
            android:layout_width="fill_parent"
            android:layout_height="1dip"
            android:scaleType="fitXY"
            android:gravity="fill_horizontal"
            android:src="@drawable/divider_horizontal_bright" />
</LinearLayout>

alert_dialog_message.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/scrollView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingBottom="12dip"
            android:paddingLeft="14dip"
            android:paddingRight="10dip">
    <TextView android:id="@+id/message"
                style="?android:attr/textAppearanceMedium"
                android:textColor="@color/dark_grey"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dip" />
</ScrollView>

Verwenden Sie dann einfach CustomAlertDialogBuilderanstelle von AlertDialog.Builder, um Ihre Dialoge zu erstellen, und rufen Sie einfach setTitleund setMessagewie gewohnt an.

Joseph Earl
quelle
3
Wie haben Sie auf android.R.internal.id.alerttitle zugegriffen?
Gilbert
2
Ich habe nicht, ich habe auf R.id.alertTitle
Joseph Earl
28

Sie können ein Thema direkt zuweisen, wenn Sie den Builder starten:

AlertDialog.Builder builder = new AlertDialog.Builder(
                    getActivity(), R.style.MyAlertDialogTheme);

Passen Sie dann Ihr Thema in Ihrem an values/styles.xml

<!-- Alert Dialog -->
<style name="MyAlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorBackground">@color/alertDialogBackground</item>
    <item name="android:windowBackground">@color/alertDialogBackground</item>
</style>
pha
quelle
1
Perfekt. Das einzige, was ich benutzt habeTheme.AppCompat.Light.Dialog.Alert
Ekashking
11

Für benutzerdefinierten Dialog:

Rufen Sie einfach super(context,R.style.<dialog style>)statt super(context)im Dialogkonstruktor auf

public class MyDialog extends Dialog
{
    public MyDialog(Context context)
    {
       super(context, R.style.Theme_AppCompat_Light_Dialog_Alert)
    }
}


Für AlertDialog:

Erstellen Sie einfach alertDialog mit diesem Konstruktor:

 new AlertDialog.Builder(
 new ContextThemeWrapper(context, android.R.style.Theme_Dialog))
Amir Hossein Ghasemi
quelle
1
Dialog muss nicht um eine neue leere Klasse erweitert werden, da es bereits eine Konstruktorversion gibt, die den Themenstil übernimmt.
FindOut_Quran
@FindOut_Quran Der Punkt ist zu zeigen, wie der Stil in einer benutzerdefinierten Dialogklasse überschrieben wird. Es ist nur ein Beispiel, Ihre echte Dialogklasse enthält auch anderen Code.
Niall
8

Ich denke, das geht nicht. Zumindest nicht mit dem Builder. Ich arbeite mit 1.6 und die Implementierung in Builder.create () lautet:

public AlertDialog create() {
    final AlertDialog dialog = new AlertDialog(P.mContext);
    P.apply(dialog.mAlert);
    [...]
}

Dies ruft den "nicht themenbezogenen" Konstruktor von AlertDialog auf, der folgendermaßen aussieht:

protected AlertDialog(Context context) {
    this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}

In AlertDialog gibt es einen zweiten Konstruktor zum Ändern von Themen:

protected AlertDialog(Context context, int theme) {
    super(context, theme);
    [...]
}

dass der Builder einfach nicht anruft.

Wenn der Dialog sowieso ziemlich allgemein ist, würde ich versuchen, eine Unterklasse von AlertDialog zu schreiben, den zweiten Konstruktor aufzurufen und diese Klasse anstelle des Builder-Mechanismus zu verwenden.

rflexor
quelle
4

Ein besserer Weg, dies zu tun, verwenden Sie einen benutzerdefinierten Dialog und passen Sie ihn an Ihre Bedürfnisse an. Hier ist ein Beispiel für einen benutzerdefinierten Dialog .....

Geben Sie hier die Bildbeschreibung ein

public class CustomDialogUI {
Dialog dialog;
Vibrator vib;
RelativeLayout rl;

@SuppressWarnings("static-access")
public void dialog(final Context context, String title, String message,
        final Runnable task) {
    dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom);
    dialog.setCancelable(false);
    TextView m = (TextView) dialog.findViewById(R.id.message);
    TextView t = (TextView) dialog.findViewById(R.id.title);
    final Button n = (Button) dialog.findViewById(R.id.button2);
    final Button p = (Button) dialog.findViewById(R.id.next_button);
    rl = (RelativeLayout) dialog.findViewById(R.id.rlmain);
    t.setText(bold(title));
    m.setText(message);
    dialog.show();
    n.setText(bold("Close"));
    p.setText(bold("Ok"));
    // color(context,rl);
    vib = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);
    n.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(15);
            dialog.dismiss();
        }
    });
    p.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(20);
            dialog.dismiss();
            task.run();
        }
    });
}
 //customize text style bold italic....
public SpannableString bold(String s) {
    SpannableString spanString = new SpannableString(s);
    spanString.setSpan(new StyleSpan(Typeface.BOLD), 0,
            spanString.length(), 0);
    spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
    // spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0,
    // spanString.length(), 0);
    return spanString;
}

}}

Hier ist das XML-Layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
>

<RelativeLayout
    android:id="@+id/rlmain"
    android:layout_width="fill_parent"
    android:layout_height="150dip"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:background="#569CE3" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="25dip"
        android:layout_marginTop="10dip" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Are you Sure?"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout1"
        android:layout_alignRight="@+id/relativeLayout1"
        android:layout_below="@+id/relativeLayout1"
        android:layout_marginTop="5dip" >
    </RelativeLayout>

    <ProgressBar
        android:id="@+id/process"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="3dip"
        android:layout_marginTop="3dip" />

    <RelativeLayout
        android:id="@+id/relativeLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout2"
        android:layout_below="@+id/relativeLayout2"
        android:layout_toLeftOf="@+id/process" >

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip"/>

    </RelativeLayout>

    <Button
        android:id="@+id/next_button"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_alignParentBottom="true"
        android:textColor="@drawable/button_text_color"
         android:background="@drawable/blue_button"
         android:layout_marginBottom="5dp"
           android:textSize="10dp"

        android:layout_alignRight="@+id/relativeLayout3"
        android:text="Okay" />

    <Button
        android:id="@+id/button2"
        android:text="Cancel"
        android:textColor="@drawable/button_text_color"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_marginBottom="5dp"
         android:background="@drawable/blue_button"
         android:layout_marginRight="7dp"
        android:textSize="10dp"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/next_button"
         />

</RelativeLayout>


quelle
7
Das Theming und die Verwendung einer benutzerdefinierten Ansicht sind zwei verschiedene Dinge und haben unterschiedliche Zwecke.
jmc34
3

Jeder, der dies innerhalb eines Fragments versucht (unter Verwendung der Unterstützungsbibliothek, dh vor API 11), sollte Folgendes tun:

public class LoadingDialogFragment extends DialogFragment {
    public static final String ID = "loadingDialog";

    public static LoadingDialogFragment newInstance() {
        LoadingDialogFragment f = new LoadingDialogFragment();

        return f;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        StyleAlertDialog adb = new StyleAlertDialog(getActivity(), R.style.Your_Style);
        adb.setView(getActivity().getLayoutInflater().inflate(R.layout.fragment_dialog_layout, null));
        return adb;
    }

    private class StyleAlertDialog extends AlertDialog {
        protected StyleAlertDialog(Context context, int theme) {
            super(context, theme);
        }
    }
}

@Rflexor gab mir den Anstoß, AlertDialog zu erweitern und den Konstruktor zu entlarven, danke

Blundell
quelle
Der Konstruktor AlertDialog.Builder(Context, int)funktioniert nur mit API 11 und höher. Ihr Code stürzt bei früheren Android-Versionen ab.
Joseph Earl
@ JosephEarl (unter Verwendung der Unterstützungsbibliothek, dh vor API 11)
Blundell
Mein schlechtes, Sie verwenden den Dialogkonstruktor und nicht den Dialogkonstruktor.
Joseph Earl
2

Die Lösung von Arve Waltin sieht gut aus, obwohl ich sie noch nicht getestet habe. Es gibt eine andere Lösung , falls Sie Schwierigkeiten haben , dass immer auf der Arbeit .... erweitern AlertDialog.Builderund alle Methoden außer Kraft setzen (zB. setText, setTitle,setView Usw.) nicht mit der tatsächlichen Dialog Text / Titel / Ansicht verwenden , sondern eine neue Ansicht zu schaffen , in Die Ansicht des Dialogs erledigt alles dort. Dann können Sie alles nach Belieben stylen.

Zur Verdeutlichung wird für die übergeordnete Klasse die Ansicht festgelegt und nichts anderes.

In Bezug auf Ihre benutzerdefinierte erweiterte Klasse wird alles in dieser Ansicht ausgeführt.

Steven L.
quelle
0

Ich bin nicht sicher, wie die Lösung von Arve in einem benutzerdefinierten Dialog mit dem Builder funktionieren würde, in dem die Ansicht über einen LayoutInflator aufgeblasen wird.

Die Lösung sollte darin bestehen, den ContextThemeWrapper durch Folgendes in den Inflator einzuführen cloneInContext():

View sensorView = LayoutInflater.from(context).cloneInContext(
     new ContextThemeWrapper(context, R.style.AppTheme_DialogLight)
).inflate(R.layout.dialog_fingerprint, null);
6rchid
quelle
-1

Dies kann einfach mit setView () des Builders erfolgen. Sie können eine beliebige Ansicht Ihrer Wahl erstellen und in den Builder einspeisen. Das funktioniert gut. Ich verwende eine benutzerdefinierte Textansicht, die vom Dialog-Builder gerendert wird. Ich setze die Nachricht nicht und dieser Bereich wird verwendet, um meine benutzerdefinierte Textansicht zu rendern.

AKh
quelle
-12
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Description");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
Sanchit Panchwatikar
quelle
Haben Sie etwas dagegen, Ihren Code mit dem integrierten Code-Snippet zu formatieren?
Adriano