পূর্ণ স্ক্রিনে নীলের পরামর্শের ফলাফলের কারণ 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
। সুতরাং, আমাদের পরিবর্তনগুলি প্রভাবিত করার জন্য, আমাদের অবশ্যই একটি ওভারডেনের ভিতরে ওভাররাইডdatePickerStyle
datePickerDialogTheme
করতে হবে ।
এখানে আমরা যাচ্ছি:
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();