Search code examples
androidandroid-5.0-lollipopandroid-dialogandroid-dialogfragment

DialogFragment buttons color change in Lollipop


I would like my Fragments to look consistent with the rest of the app and color palette which I applied so I would like to change the colors not only of title, but also of positive/negative buttons: enter image description here

I tried to do this like this, but unfortunetaly it doesn't work:

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

How to change the color of these buttons? Maybe it is possibile to do it in the whole application through styles.xml file?


Solution

  • If you can create the dialog using AlertDialog the following worked for 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);
        }
    }