2013-07-27 21 views
5

Próbuję zmienić kolor przycisku AlertDialog.Builder, ale nie znalazłem sposobu, aby to zrobić.Zmiana koloru przycisku AlertDialog.Builder

Chcę zmienić kolor przycisków i tytułu na biały jak w motywie HOLO.

zobaczyć te 2 screeny na przykładach:

enter image description here

enter image description here

Ive spojrzał tutaj:

How to change theme for AlertDialog

Change the style of AlertDialog

How to change the background of the custom alert dialog

Applying Styles Android

Wszystkie z nich nie pracuje dla mnie.

Oto mój kod:

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

To jest mój kod styl:

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

Odpowiedz

17

wiem, że to jest bardzo stare pytanie, ale natknąłem się z tym samym problemem i znalazłem rozwiązanie. Aby zmienić kolor tekstu wewnątrz przycisku w oknie alertu należy zrobić coś takiego:

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)); 
    } 

} 

a plików XML dla Twojego przycisk używany:

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> 

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

Ja osobiście użyłem tego kodu wewnątrz Fragmentu, dlatego mam LayoutInflater. W twoim przypadku możesz pominąć ten krok. Mam nadzieję, że pomoże to innym ludziom w przyszłości.

+1

wielki, dzięki mnóstwo! – Malfunction

0

Aby zmienić kolor przycisków 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)); 
    } 

Szczęśliwy Coding :)

0

Aby śledzić na @ odpowiedź Ioumaros, w setBackgroundDrawable jest teraz przestarzała. Można osiągnąć ten sam zmianę koloru tła z tym kodem:

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

Ale robią to programowo nie jest zwykle uważany za najlepszy sposób ...