2013-07-27 2 views
5

Я пытаюсь изменить цвет кнопки AlertDialog.Builder, но я не нашел способ сделать это.Изменение цвета кнопки AlertDialog.Builder

Я хочу изменить цвет кнопок и названия на белый, как в теме HOLO.

увидеть эти 2 скриншота примеры:

enter image description here

enter image description here

Ive посмотреть здесь:

How to change theme for AlertDialog

Change the style of AlertDialog

How to change the background of the custom alert dialog

Applying Styles Android

Все они не работают для меня.

Вот мой код:

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

Это мой стиль код:

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

ответ

17

Я знаю, что это очень старый вопрос, но я наткнулся с той же проблемой, и я нашел решение. Для того, чтобы изменить цвет текста внутри кнопки в диалоговом окне оповещения вы должны сделать что-то вроде этого:

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

} 

И в XMLs для вашей кнопки используется:

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> 

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

Я лично использовал этот код внутри фрагмента, поэтому у меня есть LayoutInflater. В вашем случае вы можете пропустить этот шаг. Надеюсь, что это поможет другим людям в будущем.

+1

здорово, спасибо за тонной! – Malfunction

0

Чтобы изменить кнопки Цвет предупреждающего диалога.

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

Счастливый Coding :)

0

Чтобы следить за @ ответ Ioumaros, в setBackgroundDrawable теперь осуждается. Вы можете достичь того же фон изменения цвета с помощью этого кода:

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

Но делать это программно, как правило, не считаются лучшим способом ...

Смежные вопросы