পূর্ণ স্ক্রিনে নীলের পরামর্শের ফলাফলের কারণ DatePickerহ'ল পিতামাতার থিমের পছন্দ:
<!-- Theme.AppCompat.Light is not a dialog theme -->
<style name="DialogTheme" parent="**Theme.AppCompat.Light**">
<item name="colorAccent">@color/blue_500</item>
</style>
তদতিরিক্ত, আপনি যদি এই রুটে যান, থিমটি তৈরি করার সময় আপনাকে থিমটি নির্দিষ্ট করতে হবে 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();
এটি আমার মতে ভাল নয়। স্টাইলিংটিকে জাভা থেকে বাইরে এবং স্টাইলস.এক্সএমএল / থিমস.এক্সএমএল ভিতরে রাখার চেষ্টা করা উচিত।
আমি একমত যে নীলের পরামর্শ, কিছুটা পরিবর্তন করে (পিতামাতার থিম পরিবর্তন করার জন্য Theme.Material.Light.Dialog) আপনাকে পছন্দসই ফলাফলটি দেবে। তবে, এখানে অন্য উপায়:
প্রথম পরিদর্শনকালে, আমরা এসে পৌঁছেছি datePickerStyleযাগুলি যেমন: headerBackground(আপনি কী পরিবর্তন করতে চাইছেন) dayOfWeekBackground, এবং কয়েকটি অন্যান্য পাঠ্য-বর্ণ এবং পাঠ্য শৈলীর সংজ্ঞা দেয়।
আপনার অ্যাপের থিমটিতে এই বৈশিষ্ট্যটি ওভাররাইড করা কাজ করবে না। DatePickerDialogবৈশিষ্ট্য দ্বারা নির্ধারিত একটি পৃথক থিম ব্যবহার করে datePickerDialogTheme। সুতরাং, আমাদের পরিবর্তনগুলি প্রভাবিত করার জন্য, আমাদের অবশ্যই একটি ওভারডেনের ভিতরে ওভাররাইডdatePickerStyledatePickerDialogTheme করতে হবে ।
এখানে আমরা যাচ্ছি:
datePickerDialogThemeআপনার অ্যাপের বেস থিমের ভিতরে ওভাররাইড করুন:
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
....
<item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>
নির্ধারণ করুন MyDatePickerDialogTheme। প্যারেন্ট থিমের পছন্দটি আপনার অ্যাপ্লিকেশনটির বেস থিমটি নির্ভর করবে: এটি হয় Theme.Material.Dialogবা হতে পারে Theme.Material.Light.Dialog:
<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
<item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>
আমরা datePickerStyleশৈলীতে ওভাররাইড করেছি MyDatePickerStyle। পিতামাতার পছন্দটি আবার আপনার অ্যাপের বেস থিমটি নির্ভর করবে: হয় Widget.Material.DatePickerবা হয় Widget.Material.Light.DatePicker। আপনার প্রয়োজনীয়তা অনুসারে এটি সংজ্ঞায়িত করুন:
<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
<item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style>
বর্তমানে, আমরা কেবল ওভাররাইড করছি headerBackgroundযা ডিফল্টরূপে সেট করা আছে ?attr/colorAccent(এ কারণেই নীলের পরামর্শ ব্যাকগ্রাউন্ড পরিবর্তন করতে কাজ করে)। তবে কাস্টমাইজেশনের যথেষ্ট সম্ভাবনা রয়েছে:
dayOfWeekBackground
dayOfWeekTextAppearance
headerMonthTextAppearance
headerDayOfMonthTextAppearance
headerYearTextAppearance
headerSelectedTextColor
yearListItemTextAppearance
yearListSelectorColor
calendarTextColor
calendarSelectedTextColor
আপনি যদি এত বেশি নিয়ন্ত্রণ (কাস্টমাইজেশন) না চান তবে আপনার ওভাররাইড করার দরকার নেই datePickerStyle। colorAccentবেশিরভাগ DatePicker'sরঙ নিয়ন্ত্রণ করে । সুতরাং, colorAccentভিতরে ভিতরে ওভাররাইডিংয়ের MyDatePickerDialogThemeকাজ করা উচিত:
<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>
ওভাররাইডিং colorAccentআপনাকে পরিবর্তন OKও CANCELপাঠ্যের রংগুলির অতিরিক্ত যুক্ত সুবিধা দেয় । খারাপ না.
এইভাবে আপনাকে DatePickerDialog'sকনস্ট্রাক্টরকে কোনও স্টাইলিং তথ্য সরবরাহ করতে হবে না । সবকিছু সঠিকভাবে ওয়্যার করা হয়েছে:
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();