2015-12-22 15 views
9

Próbuję zmienić kolor nagłówka mojego elementu DatePicker. Nie wydaje się jednak tak łatwe, jak na początku. Możesz to zrobić w XML jak:Ustawianie koloru nagłówka w nowym materiale DataPicker

android:headerBackground="@color/myColor" /> 

Jednak nie wydaje się, aby można było to zrobić w kodzie. Typowe ustawienia nie wydają się oczywiste (tj. datePicker.setHeaderBackground).

Wszelkie pomysły?

+4

check Vikram za odpowiedzi http://stackoverflow.com/questions/28738089/change-datepicker-dialog-color-for-android-5-0 – Gaurav

Odpowiedz

2

Oto metoda, aby zmienić tło nagłówka DatePickerDialog:

private void setDatePickerHeaderBackgroundColor(DatePickerDialog dpd, int color) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     try { 
      Field mDatePickerField; 
      mDatePickerField = DatePickerDialog.class.getDeclaredField("mDatePicker"); 
      mDatePickerField.setAccessible(true); 
      final DatePicker mDatePicker = (DatePicker) mDatePickerField.get(dpd); 

      int headerId = Resources.getSystem().getIdentifier("day_picker_selector_layout", "id", "android"); 
      final View header = mDatePicker.findViewById(headerId); 
      header.setBackgroundColor(color); 
     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Jak widać używam java odbicie na lizak i powyżej, aby uzyskać widok nagłówka.

Zastosowanie:

DatePickerDialog dpd = new DatePickerDialog(this, this, 2016, 0, 11); 
    setDatePickerHeaderBackgroundColor(dpd, getResources().getColor(android.R.color.black)); 
    dpd.show(); 

W efekcie mamy:

api >= lollipop

EDIT:

W przypadku, gdy po prostu chcesz ustawić nagłówek tło DatePicker, że ciebie Utworzone w języku xml, zapomniałem o odbiciu w Javie, po prostu użyj tych linii, aby uzyskać pracę g:

 DatePicker mDatePicker = (DatePicker) findViewById(R.id.date_picker); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     int headerId = Resources.getSystem().getIdentifier("day_picker_selector_layout", "id", "android"); 
     final View header = mDatePicker.findViewById(headerId); 
     header.setBackgroundColor(getResources().getColor(android.R.color.black)); 
    } 
+0

idealne! Dziękuję :) – spogebob92

+1

Cieszę się, że mogę Ci pomóc. Czekam na waszą nagrodę :) – rom4ek

+1

Nie działa na Nougat, powoduje awarię aplikacji. – user3718908

4

Utwórz niestandardowe okno dialogowe datepicker. Zobacz ten jeden raz: link.

Możesz użyć setAccentColor() do zmiany koloru nagłówka w tym przykładzie. używaj go jak dpd.setAccentColor(Color.BLUE);. Jeśli nie chcesz używać tego koloru, po prostu usuń poniższe linie z klasy "DatePickerDialog".

okButton.setTextColor(mAccentColor); 
cancelButton.setTextColor(mAccentColor); 
1

Trzeba zastąpić swoimi DatePickerStyle, wykonaj kroki,

1) Przestawianie DatePickerDialogTheme wewnątrz podstawowego motywu swojej aplikacji:

<style name="AppBaseTheme" parent="android:Theme.Material.Light"> 
    .... 
    <item name="android:datePickerDialogTheme">@style/CustomDatePickerDialogTheme</item> 
</style> 

2) Określ CustomDatePickerDialogTheme

<style name="CustomDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> 
    <item name="android:datePickerStyle">@style/CustomDatePickerStyle</item> 
</style> 

3) Zastąpiony DatePickerStyle z ul yle CustomDatePickerStyle

<style name="CustomDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> 
    <item name="android:headerBackground">@color/header_bg_color</item> 
</style> 

Mam nadzieję, że to pomaga.

Edit: Przepraszam brakuje części kodu, Użyj tego stylu do tworzenia DatePickerDialog tak:

new DatePickerDialog(getActivity(),R.style.CustomDatePickerStyle, this, year, month, day); 
+2

Autor pytanie, jak to zrobić w kodzie ** **. –

1

stworzyć ten styl:

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> 
    <item name="android:headerBackground">@color/chosen_header_bg_color</item> 
</style 

i dodać ten styl do tematu dialogowym :

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> 
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> 
</style> 

i dodaj to okno dialogowe do motywu aplikacji:

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker"> 
    <item name="android:headerBackground">@color/chosen_header_bg_color</item> 
</style> 

jest bardzo WLL wyjaśnione tutaj: Change Datepicker dialog color for Android 5.0

i to nie działa dla mnie.

Powiązane problemy