2015-04-22 3 views
134

Ich versuche, von Standard-Android-AlertDialog auf den neuen in AppCompat-22.1 enthielt zu migrieren Bisher verstehe ich dich nur android.support.v7.app.AlertDialog Paket importieren, um es zu benutzen hast .Wie verwenden und Stil neuer Alertdialog von AppCompat 22.1 und über

Aber wie kann ich es stylen? ZB ändern Sie die positiven/negativen Knopffarben, die Titelfarbe, die Mitteilungsfarbe und die Hintergrundfarbe?

Antwort

399

Bei der Erstellung der AlertDialog können Sie ein Thema festlegen.

Beispiel - Erstellen der Dialog

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 - Custom Style

<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 Aussehen des Titels zu ändern, können Sie die folgenden Aktionen aus. Erste einen neuen Stil hinzu:

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

danach einfach diese Art Referenz in Ihrem MyAlertDialogStyle:

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

diese Weise können Sie eine andere textColor für die Nachricht über android:textColorPrimary und eine andere für den Titel über die definieren Stil.

+1

Danke Eine weitere Sache @reVerse. Viele Bibliotheken erlauben unterschiedliche Titel- und Textfarben. Weißt du, ob das auch hier möglich ist? – ThanosFisherman

+3

@ThanosF Siehe meine Bearbeitung. ;) – reVerse

+1

Hey nochmal! Gibt es eine Möglichkeit, die Textgröße der Nachricht zu ändern? – ThanosFisherman

56

Um ein Thema für die ganze Anwendung zu verwenden, und verwenden Sie nicht den zweiten Parameter Ihren Dialogs

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

Auf meiner App mit einem Farbakzent in Thema, Stil nicht die mit den Tasten des Alertdialogs zeigen Thema colorAccent Ich muss einen Dialogstil im Theme hinzufügen.

+0

Funktioniert nicht auf API 10 (Android 2.3), wahrscheinlich nur auf API 11+. – Oliv

+2

Vielleicht auf API 15+. Ich starte neues Projekt nur auf API 15+, ich denke, dass Android vor 4 im Jahr 2015 veraltet ist. – neoteknic

+0

@Oliv Es funktioniert auf API 10 mit Abhängigkeit com.android.support:design:23.2.1 – passerby

16

Wenn Sie die neue android.support.v7.app verwenden möchten.Alertdialog und haben verschiedene Farben für die Tasten und haben auch eine benutzerdefinierte Layout dann einen Blick auf meine 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

+0

Das ist großartig! Vielen Dank – ThanosFisherman

+0

Danke, das ist die einzige Art und Weise, wie es für mich funktioniert hat, aber können Sie mir sagen, wie kann ich auch die Farbe für die Checkbox bekommen? In meiner App gibt es einen Dialog mit einer Liste von Optionsfeldern, die über 'Builder setSingleChoiceItems (CharSequence [] Elemente, int checkedItem, final OnClickListener Listener)' erstellt wurden.Ich möchte nicht so weit gehen, den Adapter zu untergliedern und die Ansicht dort zu optimieren. – Gabor

+0

schwere Artillerie ist was immer funktioniert! Ich musste das verwenden, um auf 2 Rebellknöpfe aufzupassen, die immer sich weigerten, zu der Akzentfarbe zu wechseln! – rupps

-1
<item name="editTextColor">@color/white</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textColorHint">@color/gray</item> 
    <item name="android:textColorPrimary">@color/gray</item> 
    <item name="colorControlNormal">@color/gray</item> 
    <item name="colorControlActivated">@color/white</item> 
    <item name="colorControlHighlight">#30FFFFFF</item> 
3

Follow @reVerse Antwort, aber in meinem Fall, ich hatte bereits einige Immobilien 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

I löste es durch

1) Ändern der Import von android.app.AlertDialog zu android.support.v7.app.AlertDialog
2) I 2 überschreiben 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, dass es ein anderes Volk helfen

enter image description here

Verwandte Themen