Android 5.0 के लिए DatePicker संवाद रंग कैसे बदलें


111

क्या एंड्रॉइड 5.0 के लिए डेटपिकर (और टाइमपासर) रंग योजना को बदलना संभव है?

मैंने उच्चारण रंग सेट करने का प्रयास किया है, लेकिन यह काम नहीं करता है (दोनों के साथ और बिना android:):

<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/purple</item>

<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/purple_tint</item>

<!-- colorAccent is used as the default value for colorControlActivated
     which is used to tint widgets -->
<item name="colorAccent">@color/purple_tint</item>

मूल से: यहां छवि विवरण दर्ज करें

कुछ इस तरह से: यहां छवि विवरण दर्ज करें


आपकी एप्लिकेशन थीम शैलियों में आपका रंग किस रंग का सेट है
नील

@ नील मैंने वह कोड जोड़ा है जिसे मैंने अब तक स्टाइल के लिए उपयोग करने का प्रयास किया है।
वारपज़िट

जवाबों:


322

नील के सुझाव के कारण फुलस्क्रीन 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();

यह, मेरी राय में, अच्छा नहीं है। किसी को स्टाइल को जावा और अंदर की शैलियों से बाहर रखने की कोशिश करनी चाहिए। xml / themes.xml।

मैं इस बात से सहमत हूं कि नील का सुझाव, थोड़ा बदलाव (कहने के लिए मूल विषय को बदलते हुए 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

यदि आप इसे बहुत अधिक नियंत्रण (अनुकूलन) नहीं चाहते हैं, तो आपको ओवरराइड करने की आवश्यकता नहीं है datePickerStylecolorAccentअधिकांश 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();

8
एक अच्छे और पूर्ण विवरण के लिए धन्यवाद कि यह कैसे काम करता है और इसे शैलियों में कैसे ओवरराइड करना पड़ा
Warpzit

उत्कृष्ट व्याख्या @ विक्रम हम कैसे ठीक बदल सकते हैं, पाठ का रंग रद्द कर सकते हैं?
दिलीप

1
@ विक्रम कैलेंडर सेलेक्टेडटैक्कलर नहीं मिला।
अखिलेश धर दुबे

7
क्या Android <21 datePicker के लिए बैकवर्ड संगत होना संभव है?
RoCk RoCk

1
@RoCk यह निश्चित नहीं है कि आपका क्या मतलब है, लेकिन मैंने एंड्रॉइड वर्जन 23 से संस्करण 14 तक डेट एंड टाइम पिकर को वापस पोर्ट करने के लिए एक लाइब्रेरी बनाई। प्रोजेक्ट को होस्ट किया गया है: https://github.com/vikramkakkar/SublimePicker
विक्रम

68

इसे आजमाइए।

कोड

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

शैली आपकी style.xml फ़ाइल में

EDIT - जैसा कि सुझाव दिया थीम Theme.AppCompat.Light.Dialog में बदल दिया गया है

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>

2
हाँ यह बैंगनी है, लेकिन यह भी पूर्ण स्क्रीन :) लेकिन शायद अगर मैं इसे एक टुकड़े के अंदर रखूं तो यह निहित होगा। इससे पहले कि मैं इसके साथ फिर से खेलना शुरू करने से पहले कोई सुझाव?
Warpzit

मैं देखूंगा कि क्या मुझे एक और उपयुक्त समाधान मिल सकता है जो इसे पूर्ण स्क्रीन पर जाने का कारण नहीं बनता है
नील

9
बस के parent="Theme.AppCompat.Light.Dialog"बजाय का उपयोग करेंparent="Theme.AppCompat.Light"
Chupik

@ उत्तर के लिए धन्यवाद, मुझे सही दिशा में इशारा किया और यह ठीक से सबसे तेज समाधान है, लेकिन मैं एक सभी शैली / विषय दृष्टिकोण की तलाश में था :)
Warpzit

एंड्रॉइड 6 पर काम नहीं कर रहा है, यह पूर्ण स्क्रीन है और रंग नहीं बदला गया है
Jemshit Iskenderov

16

एक नई शैली बनाएं

<!-- Theme.AppCompat.Light.Dialog -->
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>

जावा कोड:

मूल विषय यहाँ प्रमुख है। अपना रंग चुनें

DatePickerDialog = new DatePickerDialog(context,R.style.DialogTheme,this,now.get(Calendar.YEAR),now.get(Calendar.MONTH),now.get(Calendar.DAY_OF_MONTH);

परिणाम:

यहां छवि विवरण दर्ज करें


6

यह कोशिश करो, मेरे लिए काम करो

दो विकल्प रखो, colorAccentऔरandroid:colorAccent

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
   ....
    <item name="android:dialogTheme">@style/AppTheme.DialogTheme</item>
    <item name="android:datePickerDialogTheme">@style/Dialog.Theme</item>
</style>

<style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog">

<!-- Put the two options, colorAccent and android:colorAccent. -->
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorPrimary">@color/colorPrimary</item>
    <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:colorAccent">@color/colorPrimary</item>
 </style>

इस उत्तर के लिए v24 एपिस और
माइकल

3

बस उल्लेख करने के लिए, आप android.R.style.Theme_DeviceDefault_Light_Dialogइसके बजाय डिफ़ॉल्ट थीम का उपयोग कर सकते हैं ।

new DatePickerDialog(MainActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    //DO SOMETHING
    }
}, 2015, 02, 26).show();

1

आपके पास थीम नहीं है बस इसे अपने संवाद निर्माण ऑब्जेक्ट में लिखें

DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay);

इसका पालन करें यह आपको सभी प्रकार की तारीख लेने वाला शैली देगा यह वास्तव में काम है

http://www.android-examples.com/change-datepickerdialog-theme-in-android-using-dialogfragment/


मणि, भाई जैसे काम करता है!
सैम

AlertDialog.THEME_HOLO_LIGHT को पदावनत नहीं किया गया है
यश

1

मुझे समस्या थी कि एंड्रॉइड में एपीआई 24 के लिए स्क्रीन में समय बीनने वाले बटन नहीं देखे गए हैं। (एपीआई 21+) यह द्वारा हल किया जाता है

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
            <item name="android:colorAccent">@color/colorPrimary2</item></style>

<style name="Theme" parent="BBaseTheme">
         <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

1
<style name="AppThemeDatePicker" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/select2</item>
    <item name="android:colorAccent">@color/select2</item>
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>


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

0

वर्ष सूची आइटम टेक्स्ट रंग बदलने के लिए (ANDROID 5.0 ​​के लिए विशिष्ट)

बस अपनी तिथि पिकर संवाद शैली में कुछ पाठ रंग निर्धारित करें। किसी कारण से झंडा स्थापित yearListItemTextAppearanceकरने से वर्ष सूची में कोई परिवर्तन नहीं होता है।

<item name="android:textColor">@android:color/black</item>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.