16

Я бы хотел, чтобы мои фрагменты выглядели совместимыми с остальной частью приложения и цветовой палитрой, которые я применил, поэтому я хотел бы изменить цвета не только названия, но и кнопок положительного/отрицательного: enter image description hereИзменение цвета кнопок DialogFragment в Lollipop

Я пытался сделать это так, но unfortunetaly он не работает:

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

Как изменить цвет этих кнопок? Может быть, это возможно сделать во всем приложении через файл styles.xml?

ответ

25

Если вы можете создать диалог, используя AlertDialog следующие работал для меня:

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

Отлично работает! Вы сэкономили много времени. – fragon

8

Чтобы изменить цвет кнопок и флажков, отображаемых в диалоговом окне оповещения можно редактировать:

с ценностно 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> 

Что будет сделать диалоговые окна имеют выбранный цвет для текста и кнопок флажков:

DialogDate picker

+0

Как насчет API-интерфейса pre-lollipop? –

0

значения-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> 

В леденец и выше, вы не должны использование android: префикс