16

Fragments'ımın uyguladığım geri kalan uygulama ve renk paletiyle tutarlı görünmesini istiyorum. Bu nedenle, yalnızca başlıkların değil, pozitif/negatif düğmelerin de renklerini değiştirmek istiyorum: enter image description hereDialogFragment düğmeleri, Lollipop'taki renk değişimi

böyle yapmak çalıştı, ancak unfortunetaly çalışmıyor:

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

Nasıl bu düğmelerin rengini değiştirmek için? Belki de styles.xml dosyası ile tüm uygulamada bunu yapmak olasıdır?

cevap

25

sen benim için çalıştı aşağıdaki AlertDialog kullanarak iletişim oluşturabiliyorsanız:

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

İşler harika! Çok zamanımı kurtardın. – fragon

8

Uyarısı iletişim kutusunda görüntülenen düğmeler ve onay kutuları rengini değiştirmek için düzenleyebileceğiniz:

değerler- 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> 

Hangi olacak diyaloglar düğmeleri metni ve onay kutuları için seçilen renge sahip olun:-21 değerleri

DialogDate picker

+0

Lolipop öncesi API için ne dersiniz? –

0

/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> 
Lollipop olarak

ve üstü yapmamalısın android: önekini kullanın