wake-up-neo.com

Android 6.0 Dialogtext wird nicht angezeigt

Ich habe mein Telefon auf Android 6.0 aktualisiert und habe zwei Probleme mit Dialogen:

1) Der Titel wird angezeigt, aber die Meldungen sind nicht für Alarmdialog (Gelöst): 

        new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");

2) Auch der Titel eines benutzerdefinierten Dialogfragments wird nicht angezeigt (NICHT GELÖST):

        getDialog().setTitle("Title");

Es gab kein derartiges Problem in Lollipop oder älteren Versionen. Das Problem trat nur auf, nachdem ich mein Handy auf Marshmallow aktualisiert hatte.

Wie löse ich das Problem?

25
Veka

Konstruktor mit Theme für Lollipop und neuere Android-Versionen verwenden:

Dunkles Thema

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        builder = new AlertDialog.Builder(context, Android.R.style.Theme_Material_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }

Und für Lichtthema  

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        builder = new AlertDialog.Builder(context, Android.R.style.Theme_Material_Light_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }
36
Oleksandr

Ich bin auf einige Antworten gestoßen, die besagen, dass Sie Folgendes in Ihrem App-Design verwenden sollten:

<item name="Android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>

Das stimmt zwar, aber es funktionierte für mich nicht überall. Schließlich wurde mir klar, dass ich an einigen Orten den regulären AlertDialog-Builder und an anderen Orten den Support-Builder verwendete. Wenn Sie den Support-AlertDialog verwenden, stellen Sie sicher, dass Folgendes in Ihr Design aufgenommen wird:

<item name="alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
29
Stephen

Fügen Sie dies einfach in Ihre Styles-Datei in Ihr Base-Theme-Style-Tag ein, und Sie können loslegen

<item name="Android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
18
Yash Ladia

Antwort für 2), wir müssen setStyle() vor onCreateDialog() aufrufen, da theme in onCreateDialog() verwendet wird.

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        setStyle(STYLE_NORMAL, Android.R.style.Theme_Material_Light_Dialog_Alert);
    }
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle(R.string.dialog_title);
    return dialog;
}
9
fkm

ich habe versucht, dieses Problem zu lösen, indem ich einen eigenen Stil entwickelte.

ihr Dialogobjekt sollte so sein und Ihr Stil, auf den dieser Dialog verweist, wird unten geschrieben

new AlertDialog.Builder(new ContextThemeWrapper(Context, R.style.Dialog))
            .setTitle("Title")
            .setMessage("Sample Message ...").show();

R.style.Dialog ::

<style name="Dialog">
    <item name="Android:textColorPrimary">@color/primary_text</item>
    <item name="Android:textColor">@color/primary_color</item>
</style>

Farben ::

<color name="primary_text">#212121</color>
<color name="primary_color">#2196f3</color>

schließlich sollte die Ausgabe so aussehen

Note: "Android: textColorPrimary" gilt für den Dialog setMessage und "Android: textColor" für den Dialog setTitle; Ich benutze keine setPositive und setNegative Schaltfläche und Listener in meinem Dialogobjekt, aber Sie können sie im Bild sehen, wenn Sie möchten, dass Sie Ihr eigenes Dialogobjekt erstellen können.

 

6
ShahinFasihi
new AlertDialog.Builder(context)
    .setTitle("Delete entry")
    .setMessage("Are you sure you want to delete this entry?")
    .setPositiveButton(Android.R.string.yes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // continue with delete
        }
     })
    .setNegativeButton(Android.R.string.no, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // do nothing
        }
     })
    .setIcon(Android.R.drawable.ic_dialog_alert)
     .show();

Hoffe das wird dir helfen .............

1
Amaresh Jana

Ich vermute, dass Sie am Ende weißen Text auf weißem Hintergrund anzeigen! (Wenn Sie den Screenshot betrachten, wird auch das Symbol (i) nicht richtig angezeigt, was darauf hindeutet, dass das Symbol auf einem anderen Hintergrund als Weiß angezeigt wird.

Sie können den Konstruktor public AlertDialog.Builder (Context context, int themeResId) verwenden, um sicherzustellen, dass Sie ein bestimmtes Design verwenden, um Ihren Dialog zu gestalten, wobei der Theme_Material_Dialog wahrscheinlich das ist, was Sie möchten.

1
zmarties

Möglicherweise entspricht Ihre Haupttextfarbe der Hintergrundfarbe des Dialogs. Verwenden Sie in diesem Fall Ihre Styles.xml (nur ein Beispiel):

<style name="AlertDialog" parent="@Android:style/Theme.Material.Light.Dialog.Alert">
    <item name="Android:textColor">#000000</item>
</style>

und bei der Dialogerstellung:

new AlertDialog.Builder(
        new ContextThemeWrapper(getContext(), R.style.AlertDialog))
).setMessage("test");
1
Borzh
@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }

Sobald Sie diese Hoffnung überprüft haben, wird dies funktionieren .......

0
Amaresh Jana

In meinem Fall hatten alle Dialoge die gleiche Farbe wie Schriftarten (Titel & Nachricht). Um diesen Zustand zu beheben, habe ich die Farbattribute in meinem Design geändert. Ich habe die XML-Theme-Datei in 'res/values-v22' kopiert und eine andere Farbe für Marshmallow gesetzt. 

<resources>
    <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="Android:textColorPrimary">@Android:color/tertiary_text_dark</item>
    </style>
</resources>

oder nur für Dialoge

<resources>
    <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="Android:alertDialogTheme">@style/LywAlertDialogStyle</item>
    </style>
    <style name="LywAlertDialogStyle" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="Android:textColorPrimary">@color/lyw_secondary_text_color</item>
    </style>
</resources>

Wenn Sie DialogFragment verwenden, müssen Sie dies tun

  1. Stil hinzufügen

    <style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
        <item name="Android:windowNoTitle">false</item>
    </style>
    
  2. In Ihrer DialogFragment fügen Sie getTheme hinzu.

    public class CustomDialogFragment extends DialogFragment{
        public int getTheme() { 
            return R.style.CustomDialogFragment; 
        }
        .
        .
        .
    

Und das ist es!

0
Samuel Bilý