2017-12-02 21 views
1

Ich versuche, einen AlertDialog mit dem Standard-AppCompat-Design anzuzeigen, während die Hauptaktivität ein benutzerdefiniertes Design hat. Mein Problem ist, dass der angezeigte AlertDialog einige der übergeordneten Aktivitätsstile erbt (insbesondere die Akzentfarbe, aber auch die Textfarbe).Benutzerdefiniertes Aktivitätsdesign mit Standarddialogdesign

Hier ist meine Tätigkeit Thema:

<style name="Theme.MainMenu.MyTheme" parent="Theme.AppCompat"> 
    <item name="android:windowBackground">@drawable/background</item> 
    <item name="colorPrimary">@color/myPrimary</item> 
    <item name="colorPrimaryDark">@color/myPrimary_dark</item> 
    <item name="colorAccent">@color/myAccent</item> 
</style> 

Hier ist, wie ich den Alertdialog (enthaltend eine EditText)

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

erstellen Wenn ich der Alertdialog kein Thema meiner Tätigkeit angeben, Anzeige wie erwartet: As expected

Aber wenn ich MyTheme auf meine Aktivität anwenden, sieht der AlertDialog wie folgt aus: Inherited colorAccent and EditText color

Trotz der Theme_AppCompat_Light_Dialog_Alert Thema ich dem Builder geben. Die Akzentfarbe (hier in Rot) und die EditText-Farbe scheinen vom Aktivitätsthema geerbt zu sein.

Warum gibt es diese Vererbung und wie kann sie vermieden werden, oder gibt es eine Lösung, um zu erzwingen, dass der AlertDialog das "vollständige" Standardthema verwendet?

Vielen Dank

Edit 1:

Wie MinnuKaAnae vorgeschlagen, ich einen benutzerdefinierten Stil für die DialogAlert erstellen, basierend auf Theme.AppCompat.Light.Dialog.Alert Überschreiben der benötigten Attribute, aber ich muss auf die Standardfarben von AppCompat zeigen:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="colorAccent">@color/NEED_APPCOMPAT_DEFAULT_COLOR_ACCENT_HERE</item> 
    <item name="android:textColorPrimary">@color/NEED_APPCOMPAT_DEFAULT_PRIMARY_COLOR_HERE</item> 
    <item name="android:background">@color/NEED_APPCOMPAT_DEFAULT_BACKGROUND_COLOR_HERE</item> 
</style> 

Und in meinem Fall Ich muss auch die EditText-Textfarbe auf die Light-Version (schwarzer Text) überschreiben, da die Aktivität nicht auf dem Light-Thema basiert: das Attribut android: editTextColor scheint die Aufgabe nicht zu erfüllen.

+0

Ihre Theme_AppCompat_Light_Dialog_Alert veröffentlichen – MinnuKaAnae

+0

ein eigenes Design erstellen und setzte in Ihrem colorPrimary, colorDarkPrimary und coloraccent Farbe und verwenden Sie es in diesem Dialog –

+0

@MinnuKaAnae: Die Theme_AppCompat_Light_Dialog_Alert ist der Stil der Android-Support-Bibliothek. – Virtual

Antwort

0

Diesen

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> 
    <item name="colorAccent">#006A4E</item> 
    <item name="android:textColorPrimary">#3f3f3f</item> 
    <item name="android:background">#ffffff</item> 
</style> 

ändern

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle); 
+0

Wenn ich das addiere, bekomme ich ein "_Duplicate Symbol in der Tabelle mit dem Ressourcentyp 'style' und dem Symbolnamen 'Theme_AppCompat_Light_Dialog_Alert'_". Wie erwartet: Compat-Bibliothek definiert diesen Stilnamen. – Virtual

+0

@Virtueller Stil Name AppCompatAlertDialogStyle kann alles sein, überprüfen Sie meine aktualisierte Antwort, übergeordneten Namen Theme.AppCompat.Light.Dialog.Alert, das ist Standard-Thema in Android, müssen wir dies überschreiben. – MinnuKaAnae

+0

oder ändern Sie die Akzentfarbe in Theme_AppCompat_Light_Dialog_Alert auf Ihre Bedürfnisse. – MinnuKaAnae

Verwandte Themen