16

Ich möchte, dass meine Fragmente konsistent mit dem Rest der App und der Farbpalette, die ich angewendet habe, aussehen würde. Ich möchte die Farben nicht nur des Titels, sondern auch der positiven/negativen Buttons ändern: enter image description hereDialogFragment buttons Farbwechsel in Lollipop

ich habe versucht, dies so zu tun, aber unfortunetaly funktioniert es nicht:

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

Wie die Farbe dieser Tasten ändern? Vielleicht ist es möglich, es in der gesamten Anwendung über styles.xml-Datei zu tun?

Antwort

25

Wenn Sie den Dialog erstellen AlertDialog mit der für mich gearbeitet folgende:

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

Funktioniert gut! Du hast viel Zeit gespart. – fragon

8

Um die Farbe der Schaltflächen und Kontrollkästchen Benachrichtigungsdialog angezeigt zu ändern können Sie bearbeiten:

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

denen machen die Dialoge die ausgewählte Farbe für die Schaltflächen Text und Kontrollkästchen haben:

DialogDate picker

+0

Wie wäre es mit Pre-Lollipop API? –

0

Werte-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 und oben sollte man nicht Verwenden Sie android: Vorwahl