Alasan mengapa saran Neil menghasilkan layar penuh DatePickeradalah pilihan tema induk:
<!-- Theme.AppCompat.Light is not a dialog theme -->
<style name="DialogTheme" parent="**Theme.AppCompat.Light**">
<item name="colorAccent">@color/blue_500</item>
</style>
Selain itu, jika Anda mengikuti rute ini, Anda harus menentukan tema saat membuat DatePickerDialog:
// R.style.DialogTheme
new DatePickerDialog(MainActivity.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//DO SOMETHING
}
}, 2015, 02, 26).show();
Ini, menurut saya, tidak baik. Seseorang harus mencoba untuk menjaga styling dari java dan di dalam styles.xml / themes.xml.
Saya setuju bahwa saran Neil, dengan sedikit perubahan (mengubah tema induk menjadi, Theme.Material.Light.Dialog) akan memberi Anda hasil yang diinginkan. Tapi, inilah cara lain:
Pada pemeriksaan pertama, kami menemukan datePickerStyleyang mendefinisikan hal-hal seperti: headerBackground(apa yang Anda coba ubah) dayOfWeekBackground, dan beberapa warna teks dan gaya teks lainnya.
Mengganti atribut ini di tema aplikasi Anda tidak akan berfungsi. DatePickerDialogmenggunakan tema terpisah yang dapat ditentukan oleh atribut datePickerDialogTheme. Jadi, agar perubahan kita berpengaruh, kita harus mengganti datePickerStyleinside a overridendatePickerDialogTheme .
Kita mulai:
Ganti datePickerDialogThemedi dalam tema dasar aplikasi Anda:
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
....
<item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>
Tentukan MyDatePickerDialogTheme. Pilihan tema induk akan bergantung pada apa tema dasar aplikasi Anda: bisa jadi Theme.Material.Dialogatau Theme.Material.Light.Dialog:
<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
<item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>
Kami telah menimpa datePickerStyledengan gaya MyDatePickerStyle. Pilihan induk sekali lagi akan bergantung pada apa tema dasar aplikasi Anda: baik Widget.Material.DatePickeratau Widget.Material.Light.DatePicker. Tentukan sesuai kebutuhan Anda:
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style>
Saat ini, kami hanya mengganti headerBackgroundyang secara default disetel ke ?attr/colorAccent(ini juga mengapa saran Neil berfungsi dalam mengubah latar belakang). Tetapi ada cukup banyak kemungkinan penyesuaian:
dayOfWeekBackground
dayOfWeekTextAppearance
headerMonthTextAppearance
headerDayOfMonthTextAppearance
headerYearTextAppearance
headerSelectedTextColor
yearListItemTextAppearance
yearListSelectorColor
calendarTextColor
calendarSelectedTextColor
Jika Anda tidak ingin banyak kontrol (kustomisasi), Anda tidak perlu mengganti datePickerStyle. colorAccentmengontrol sebagian besar DatePicker'swarna. Jadi, mengesampingkan just colorAccentinside MyDatePickerDialogThemeseharusnya berfungsi:
<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
<item name="android:colorAccent">@color/date_picker_accent</item>
<!-- No need to override 'datePickerStyle' -->
<!-- <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> -->
</style>
Mengganti colorAccentmemberi Anda manfaat tambahan dari mengubah OK& CANCELwarna teks juga. Tidak buruk.
Dengan cara ini Anda tidak perlu memberikan informasi gaya apa pun ke DatePickerDialog'skonstruktor. Semuanya telah terhubung dengan benar:
DatePickerDialog dpd = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
}
}, 2015, 5, 22);
dpd.show();