16

Desidero che i miei frammenti siano coerenti con il resto dell'app e la tavolozza dei colori che ho applicato, quindi vorrei modificare i colori non solo del titolo, ma anche dei pulsanti positivi/negativi: enter image description hereCambiamenti di colore dei pulsanti DialogFragment in Lollipop

ho cercato di farlo in questo modo, ma unfortunetaly non funziona:

public void onStart() { 
     super.onStart(); 
     Dialog d = getDialog(); 
     int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null); 
     View divider = d.findViewById(dividerId); 

     if(currentapiVersion< Build.VERSION_CODES.LOLLIPOP) { 
      divider.setBackgroundColor(getResources().getColor(R.color.accent)); 
      LinearLayout ll = (LinearLayout) d.findViewById(R.id.dialog_background); 
      ll.setBackgroundResource(R.drawable.backrepeat_reversed); 
     } 
     if(currentapiVersion == Build.VERSION_CODES.LOLLIPOP) { 
      int buttonsId = d.getContext().getResources().getIdentifier("android:id/negativeButton", null, null); 
      Button b = (Button) d.findViewById(buttonsId); 
      b.setTextColor(getResources().getColor(R.color.accent)); 
     } 
     int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null); 
     TextView tv = (TextView) d.findViewById(textViewId); 

     tv.setTextColor(getResources().getColor(R.color.accent)); 
    } 

Come modificare il colore di questi pulsanti? Forse è possibile farlo nell'intera applicazione attraverso il file styles.xml?

risposta

25

Se è possibile creare la finestra di dialogo utilizzando il seguente AlertDialog ha lavorato per me:

public class DialogTest extends DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return new AlertDialog.Builder(getActivity()).setTitle("Test") 
       .setMessage("This is a dialog.") 
       .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 

        } 
       }) 
       .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 

        } 
       }).show(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.RED); 
     ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.RED); 
    } 
} 
+0

Funziona alla grande! Hai risparmiato molto del mio tempo. – fragon

8

Per cambiare il colore dei pulsanti e caselle di controllo visualizzate nella finestra di avviso è possibile modificare:

VALORI 21/styles.xml

<style name="AppTheme" parent="..."> 
    ... 
    <item name="android:timePickerDialogTheme">@style/AlertDialogCustom</item> 
    <item name="android:datePickerDialogTheme">@style/AlertDialogCustom</item> 
    <item name="android:alertDialogTheme">@style/AlertDialogCustom</item> 
</style> 

<style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert"> 
    <item name="android:colorPrimary">#00397F</item> 
    <item name="android:colorAccent">#0AAEEF</item> 
</style> 

che sarà rendere le finestre di dialogo hanno il colore scelto per il testo pulsanti e caselle di controllo:

DialogDate picker

+0

Cosa ne pensi dell'API pre-lecca-lecca? –

0

valori-21/styles.xml

<style name="AppTheme" parent="..."> 
    ... 
    <item name="alertDialogTheme">@style/AlertDialogCustom</item> 
</style> 


<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert"> 
     <item name="colorAccent">@color/buttons_color</item> 
</style> 

In Lollipop e soprattutto non si deve utilizzare il prefisso android: