2015-05-14 8 views
7

Sto provando nuovo AlertDialog da appcompat v7 22.1.1.Finestra di dialogo AppCompat Alert Pulsante di azione sfondo Premuto stato

Funziona piuttosto bene (in tutte le versioni di Android) come nell'immagine.

enter image description here

Style per AlertDialog è questo. (Per ora sto usando i valori di colore hardcoded invece di risorse colore)

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

      <item name="colorPrimaryDark">#111111</item> 

      <item name="colorPrimary">#00ddff</item> 

      <item name="colorAccent">#0044aa</item> 

      <item name="colorButtonNormal">#00aaaa</item> 

      <item name="colorControlHighlight">#00ddff</item> 

      <item name="alertDialogTheme">@style/AlertDialogTheme</item> 

</style> 
<style name="AlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert"> 
       <item name="colorAccent">#0044aa</item> 
       <item name="android:background">#ffffff</item> 
       <item name="android:textColorPrimary">#000000</item> 
       <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item> 
</style> 

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

La mia domanda è,

1) come cambiare il colore statePressed che è arrotondato (Gray) nell'immagine?

2) Nessun colore premuto è presente in Android> = 21, che cos'è l'hack per questo?

3) Come posso avere diversi colori di pulsanti di azione (è possibile)?

Qualsiasi aiuto sarebbe fantastico.

risposta

15

È possibile utilizzare gli attributi di stile come

  • buttonBarButtonStyle
  • buttonBarNegativeButtonStyle
  • buttonBarNeutralButtonStyle
  • buttonBarPositiveButtonStyle

Esempio:

<style name="dialog_theme" parent="Theme.AppCompat.Dialog.Alert"> 
    <item name="buttonBarNegativeButtonStyle">@style/dialog_button.negative</item> 
    <item name="buttonBarPositiveButtonStyle">@style/dialog_button.positive</item> 
</style> 

<style name="dialog_button"> 
    <item name="android:textStyle">bold</item> 
    <item name="android:minWidth">64dp</item> 
    <item name="android:paddingLeft">8dp</item> 
    <item name="android:paddingRight">8dp</item> 
    <item name="android:background">@drawable/dialogButtonSelector</item> 
</style> 

<style name="dialog_button.negative"> 
    <item name="android:textColor">#f00</item> 
</style> 

<style name="dialog_button.positive"> 
    <item name="android:layout_marginLeft">8dp</item> 
    <item name="android:textColor">#00f</item> 
</style> 

Dove dialogButtonSelector è il nostro selettore personalizzabile.

Un set di sfondo sfortunato su dialog_button distrugge paddings e margini, quindi è necessario impostarlo nuovamente.

dialog_button stile può ereditare attraverso Widget.AppCompat.Button.ButtonBar.AlertDialog ma ho scoperto che ha stili mancanti come textStylebold.

+0

abbastanza tardi ad accettare la risposta. Thnx per la grande risposta e buon lavoro. –

2

ho la risposta per il 3 ° Domande
(Come posso avere colori diversi di pulsanti di azione (E 'possibile)?)

Codice:

// Initialize AlertDialog & AlertDialog Builder 
AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this); 
builder.setTitle("AlertDialog Title"); 
........... 
......... 
//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)); 
    } 

Felice Coding :)

+0

questa è una bella prova. Ma lo volevo nel tema. E la risposta accettata funziona bene. Anche se +1 per la versione in codice di esso. –

+0

Grazie. Happy Coding :) –

0

AlertDialog.Builder builder = new AlertDialog.Builder (MainActivity.this); builder.setMessage ("Title"); builder.setCancelable (true);

builder.setPositiveButton("OK", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 

      } 
     }); 

builder.setNegativeButton("Cancel", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 

AlertDialog alertdialog = builder.create(); 
alertdialog.show(); 

Button nbutton = alertdialog.getButton(DialogInterface.BUTTON_NEGATIVE); 
nbutton.setBackground(getResources().getDrawable(R.drawable.btn_press_white_rect)); 

Button pbutton = alertdialog.getButton(DialogInterface.BUTTON_POSITIVE); 
pbutton.setBackground(getResources().getDrawable(R.drawable.btn_press_white_rect)); 

     **btn_press_white_rect.xml** 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/rounded_rect_yellow" ></item> 
<item android:state_pressed="false" android:drawable="@drawable/rounded_rect_white" ></item> 
</selector>