2013-07-27 6 views
5

En essayant de changer la couleur du bouton de AlertDialog.Builder, mais je n'ai pas trouvé un moyen de le faire.Modification de la couleur du bouton AlertDialog.Builder

Je veux changer la couleur des boutons et le titre en blanc comme dans le thème HOLO.

voir ces 2 captures d'écran pour des exemples:

enter image description here

enter image description here

Ive regardé ici:

How to change theme for AlertDialog

Change the style of AlertDialog

How to change the background of the custom alert dialog

Applying Styles Android

Tous ne fonctionnent pas pour moi.

Voici mon code:

public void logInDialog() 
{ 
    ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.dialogStyle); 
    AlertDialog.Builder builder = new AlertDialog.Builder(ctw); 
    builder.setTitle("Log in"); 
    View prefView = View.inflate(this, R.layout.log_in, null); 
    //The rest of the code......... 
} 

Ceci est mon code de style:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="dialogStyle" parent="android:Theme.Dialog"> 
     <item name="android:background">@color/white</item> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:button">@color/white</item> 
    </style>  
</resources> 

Répondre

17

Je sais que c'est une question très ancienne, mais je suis tombé sur le même problème et j'ai trouvé un Solution. Pour changer la couleur du texte dans un bouton d'une boîte de dialogue d'alerte vous devriez faire quelque chose comme ceci:

public void logInDialog() 
{ 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    LayoutInflater inflater = context.getLayoutInflater(); 

    //setting custom view for our dialog 
    View myview = inflater.inflate(R.layout.YOUR_CUSTOM_LAYOUT, null); 
    builder.setNeutralButton(android.R.string.cancel, null); 
    builder.setView(myview); 

    //creating an alert dialog from our builder. 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 

    //retrieving the button view in order to handle it. 
    Button neutral_button = dialog.getButton(DialogInterface.BUTTON_NEUTRAL); 

    Button positive_button = dialog.getButton(DialogInterface.BUTTON_POSITIVE); 


    if (neutral_button != null) { 
     neutral_button.setBackgroundDrawable(context.getResources() 
         .getDrawable(R.drawable.custom_background)); 

     neutral_button.setTextColor(context.getResources() 
         .getColor(android.R.color.white)); 
    } 
    if (positive_button != null) { 
     positive_button.setBackgroundDrawable(context.getResources() 
         .getDrawable(R.drawable.custom_background)); 

     positive_button.setTextColor(context.getResources() 
         .getColor(android.R.color.white)); 
    } 

} 

Et les xmls pour le bouton utilisé:

custom_background.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:drawable="#000000"/> 
    <item android:drawable="@drawable/selectable_item_background"/> 

</layer-list> 

Et selectable_item_background.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/item_pressed" android:state_pressed="true"/> 
    <item android:drawable="@drawable/item_focused" android:state_focused="true"/> 
    <item android:drawable="@drawable/item_focused" android:state_selected="true"/> 
    <item android:drawable="@android:color/transparent"/> 

</selector> 

J'ai personnellement utilisé ce code dans un Fragment, c'est pourquoi j'ai un LayoutInflater. Dans votre cas, vous pouvez ignorer cette étape. Espérons que cela aidera d'autres personnes dans le futur.

+1

Great, merci ton! – Malfunction

0

Pour modifier les boutons Couleur du composant AlertDialog.

// Initialize AlertDialog & AlertDialog Builder 
AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this); 
builder.setTitle(R.String.AlertDialogTitle); 
........... 
......... 
//Build your AlertDialog 
AlertDialog Demo_alertDialog= builder.create(); 
Demo_alertDialog.show(); 

//For Positive Button: 
Button b_pos; 
b_pos=Demo_alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
if(b_pos!=null){ 
    b_pos.setTextColor(getResources().getColor(R.color.YourColor)); 
    }  


//For Neutral Button: 
Button b_neu; 
b_neu=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); 
if(b_neu!=null){ 
    b_neu.setTextColor(getResources().getColor(R.color.YourColor)); 
    } 

//For Negative Button: 
Button b_neg; 
b_neg=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); 
if(b_neg!=null){ 
    b_neg.setTextColor(getResources().getColor(R.color.YourColor)); 
    } 

Bonne programmation :)

0

Pour donner suite à la réponse de @ Ioumaros, setBackgroundDrawable est maintenant dépréciée. Vous pouvez obtenir le même changement de couleur de fond avec ce code:

Button negativeButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); 
    negativeButton.setBackgroundColor(getResources().getColor(R.color.colorBackground)); 

    Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
    positiveButton.setBackgroundColor(getResources().getColor(R.color.colorBackground)); 

Mais, ce faisant est généralement pas considérée comme la meilleure programatically façon ...

Questions connexes