अपने एंजेल की संख्या का पता लगाएं
स्प्राउट में इंजीनियरिंग: एक Android महीने पिकर का निर्माण
नोट: यह लेख सामग्री घटक संस्करण पर आधारित था १.२.०-बीटा ०१ के रूप में 1 जून, 2020 ।
अपने साढ़े तीन साल में एचएएचटीएटीएजीएस में एक छोटी सी एंड्रॉइड टीम में काम करते हुए, एक मुख्य चीज जो मुझे हर दिन काम में आने के लिए प्रेरित करती है, वह है हमारी कंपनी की स्वतंत्रता और विश्वास जो किसी भी तरह से समस्या से निपटने के लिए सबसे अच्छा है।
उत्पाद अद्यतन पर वितरित करने के लिए समय-सीमा का लेखा-जोखा करते समय हमें आवश्यक किसी समस्या के कई अलग-अलग समाधानों पर शोध और अन्वेषण करने की स्वतंत्रता, हमारे ग्राहकों और हमारे सॉफ़्टवेयर दोनों के लिए सबसे अच्छा समाधान खोजने में सक्षम बनाती है।
ऐसी ही एक चुनौती में हमारे नए मोबाइल रिपोर्टिंग सुविधा के लिए एक यूआई घटक का निर्माण शामिल था। यह नया घटक एक महीना लेने वाला था, जिसने हमारे उपयोगकर्ताओं को एक एनालिटिक्स रिपोर्ट के लिए तिथि सीमा की गुंजाइश करने की अनुमति दी थी।

हमने जो शुरुआती स्थान चुना था वह मौजूदा था सामग्री घटक पुस्तकालय । खरोंच से शुरू करने के बजाय, यह लाइब्रेरी सक्रिय रूप से बनाए रखी जाती है और सामग्री विनिर्देशों के साथ संरेखित होती है। एक नींव के रूप में इस पुस्तकालय के साथ, हम तर्क की मात्रा को कम कर सकते हैं जो हमें खुद को लिखना होगा।
इस लेख में, मैं बताता हूं कि हमने इस प्रक्रिया के लिए कैसे संपर्क किया, स्प्राउट एंड्रॉइड ऐप के निर्माण में कुछ अनोखे कारक, कुछ 'गेटचे' जो रास्ते में आए (और तय किए गए थे), और अगर आपको पता हो तो क्या होगा इसी तरह के प्रोजेक्ट पर काम कर रहे हैं।
परिचय
Android सामग्री घटक 1.1.0 रिलीज एक नया दिनांक पिकर UI घटक पेश किया। इस नए के स्वागत योग्य परिवर्धन में से एक MaterialDatePicker
AppCompat पर CalendarView
कैलेंडर दृश्य या पाठ इनपुट फ़ील्ड का उपयोग करके दिनांक की एक श्रृंखला का चयन करने की क्षमता है।
पुराना AppCompat CalendarView बहुत लचीला नहीं था। यह सीमित उपयोग के मामले में इसे हल करने के लिए एक अच्छा घटक था; अनुमत तारीख सीमा को निर्दिष्ट करने के लिए एकल तिथि और वैकल्पिक न्यूनतम और अधिकतम तिथियों का चयन करना है।
नई MaterialDatePicker व्यवहार की विस्तारित कार्यक्षमता के उपयोग की अनुमति देने के लिए अधिक लचीलेपन के साथ बनाया गया था। यह इंटरफेस की एक श्रृंखला के माध्यम से काम करता है जो कि पिकर के व्यवहार को ट्विक और संशोधित करने के लिए लागू कर सकता है।
यह व्यवहार संशोधन रन-टाइम पर बिल्डर पैटर्न फ़ंक्शन के सेट के माध्यम से किया जाता है | _ _ + _ | कक्षा।
इसका मतलब है कि हम इसका आधार व्यवहार बढ़ाने में सक्षम हैं। _ + _ | कंपोजेबल इंटरफ़ेस घटकों के माध्यम से।
नोट: जबकि विभिन्न घटकों के एक नंबर हैं | _ _ + _ | उपयोग करता है, इस लेख में हम केवल दिनांक चयन घटक को कवर करेंगे।
१११ प्यार अर्थ
तिथि सीमा लेने वाला
HASHTAGS Android टीम हमारे Analytics रिपोर्ट अनुभाग के निर्माण की प्रक्रिया में थी।
यह नया खंड हमारे उपयोगकर्ताओं को फ़िल्टर के एक सेट और तारीख के एक सेट का चयन करने की अनुमति देगा, जो रिपोर्ट को कवर करेगा।


द MaterialDatePicker.Builder
कुछ पूर्व-निर्मित घटकों के साथ आया जो हम अपने उपयोग के मामले को पूरा करने के लिए लाभ उठा सकते हैं।
हमारे सबसे आम मामले के लिए, उपयोगकर्ता को कई प्रकार की तिथियों का चयन करने की अनुमति देता है, पूर्व-निर्मित MaterialDatePicker
पर्याप्त होगा:
इस कोड ब्लॉक के साथ, हमें एक डेट पिकर मिलता है जो उपयोगकर्ताओं को एक तिथि सीमा चुनने की अनुमति देता है।

मासिक तिथि लेने वाला
एचएएचटीएजीएएस रिपोर्टों में से एक, जिसमें अद्वितीय तिथि चयन है, ट्विटर ट्रेंड्स रिपोर्ट है।
यह रिपोर्ट दूसरों से भिन्न है कि किसी भी प्रकार की तिथि सीमा की अनुमति देने के बजाय, यह एक महीने के चयन को लागू करता है, जिसका अर्थ है कि एक उपयोगकर्ता केवल मार्च 2020 बनाम 3 मार्च से 16 मार्च 2020 का चयन कर सकता है।
हमारा वेब ऐप इसे ड्रॉपडाउन फॉर्म फ़ील्ड का उपयोग करके संभालता है:

द MaterialDatePicker
पिछले अनुभाग में चर्चा की गई पूर्व-निर्मित सामग्री तिथि सीमा पिकर के साथ इस तरह के प्रतिबंध को लागू करने का एक तरीका नहीं है। सौभाग्य से, MaterialDatePicker का निर्माण योग्य भागों के साथ किया गया था जो हमें अपने विशेष उपयोग के मामले के लिए डिफ़ॉल्ट व्यवहार का विस्तार करने की अनुमति देते हैं।
तिथि चयन व्यवहार
द MaterialDatePicker
उत्तोलन a | _ _ + _ | पिकर के चयन तर्क के लिए उपयोग किए जाने वाले इंटरफ़ेस के रूप में।
जावदोक से:
“यूजर्स के लिए इंटरफेस MaterialDatePicker
यह प्रदर्शित करने के लिए कि कैलेंडर कैसे प्रदर्शित करता है और चयन करता है ... '
आप देखेंगे कि | _ _ + _ | का एक बिल्डर उदाहरण देता है। _ + _ |, जिसका उपयोग हमने ऊपर के उदाहरण में किया था।
यह वर्ग एक पूर्व-निर्मित चयनकर्ता है जो लागू करता है MaterialDatePicker
एक मासिक तिथि चयन व्यवहार का मंथन
हमारे उपयोग के मामले के लिए, हम अपने उपयोगकर्ताओं को एक चयनित तिथि सीमा के रूप में पूरे महीने का चयन करने का एक तरीका चाहते थे; जैसे मई 2020, अप्रैल 2020, आदि।
हमने सोचा कि पूर्व निर्मित MaterialDatePicker
ऊपर संदर्भित हमें वहां सबसे ज्यादा मिला। घटक ने एक उपयोगकर्ता को एक तिथि सीमा चुनने और एक लागू करने की अनुमति दी सीमा ।
केवल एक चीज जो गायब थी, वह पूरे महीने में ऑटो-चयन का चयन करने का एक तरीका था। का डिफ़ॉल्ट व्यवहार DateSelector
उपयोगकर्ता ने एक आरंभ तिथि और अंतिम तिथि का चयन किया है।
हम ऐसा व्यवहार चाहते थे कि जब कोई उपयोगकर्ता महीने में एक दिन का चयन करता है, तो पिकर पूरे महीने को तिथि सीमा के रूप में ऑटो-सेलेक्ट करेगा।

हमने जिस समाधान पर फैसला किया था, वह था | _ _ + _ | और फिर पूरे महीने के बजाय ऑटो चयन का दिन चयन व्यवहार ओवरराइड करें।
सौभाग्य से, एक फ़ंक्शन है जिसे हम इंटरफ़ेस से ओवरराइड कर सकते हैं {@link MaterialCalendar}
कहा जाता है: MaterialDatePicker.Builder.dateRangePicker()
यह फ़ंक्शन तब चुना जाएगा जब कोई उपयोगकर्ता पिकर में एक दिन का चयन करता है, चयनित दिन यूटीसी मिलीसेकंड में युगांतर से गुजरता है।
एक मासिक तिथि चयन व्यवहार को लागू करना
कार्यान्वयन सबसे सरल हिस्सा है, क्योंकि हमारे पास एक स्पष्ट कार्य है जिसे हम अपने इच्छित व्यवहार को प्राप्त करने के लिए ओवरराइड कर सकते हैं।
मूल तर्क यह होगा:
- उपयोगकर्ता एक दिन का चयन करता है।
- द
RangeDateSelector
समारोह में चयनित दिन के साथ आह्वान किया जाता है लंबा युग से यूटीसी मिलीसेकंड। - हमारे द्वारा दिए गए दिन से महीने का पहला और अंतिम दिन खोजें।
- एक कॉल करें। _ _ + _ | &
DateSelector
- से मूल व्यवहार
RangeDateSelector
उम्मीद के मुताबिक काम करना चाहिए, और महीने को एक तिथि सीमा के रूप में चुनना चाहिए।
यह सब एक साथ डालें
अब हमारे पास हमारा रिवाज है RangeDateSelector
, हम अपना सेट कर सकते हैं RangeDateSelector
उदाहरण को और आगे ले जाने के लिए, हम इस तरह से चयन के परिणाम को संसाधित कर सकते हैं:
परिणाम इस तरह दिखेगा:

गोचर
सिर्फ एक प्रमुख मुद्दा था जिसने इस समाधान पर पहुंचना मुश्किल बना दिया।
हमारे निर्माण के लिए उपयोग किए जाने वाले प्राथमिक घटक DateSelector
वर्ग थे select(selection: Long)
और इंटरफ़ेस select()
इस आलेख में उपयोग किए गए पुस्तकालय के संस्करण (1.2.0-Beta01) ने इन दो फाइलों की दृश्यता को सीमित कर दिया, ताकि उन्हें विस्तारित या लागू करने को हतोत्साहित किया जा सके।
परिणामस्वरूप, हालांकि हम सफलतापूर्वक अपने नए संकलन कर सकते हैं। _ + _ _ |, कंपाइलर ने हमें ऐसा करने से हतोत्साहित करने के लिए बहुत डरावना चेतावनी दी:

इस संकलक चेतावनी को छिपाने का एक तरीका है एक | _ + _ _ | इस तरह:

यह अनुभव बताता है कि कैसे, भले ही सामग्री घटक पुस्तकालय ने एंड्रॉइड डेवलपर समुदाय को कुछ महान नए घटक प्रदान किए हों, लेकिन यह अभी भी प्रगति पर है।
इस लाइब्रेरी का एक बड़ा हिस्सा Android समुदाय से प्रतिक्रिया के लिए खुलापन है! इस घटक दृश्यता प्रतिबंध की खोज के बाद, मैंने एक खोला समस्या गितुब परियोजना पर, और यहां तक कि एक खोला जनसंपर्क इसे तुरंत पता करने के लिए।
मटीरियल कंपोनेंट्स टीम और एंड्रॉइड कम्युनिटी के बीच यह ओपन फीडबैक लूप सभी के लिए शानदार सहयोग और परिणाम तैयार करता है।
निष्कर्ष
नया super.select(1st of month)
बॉक्स की कार्यक्षमता में से कुछ महान हैं जो संभवतः तारीख चयन के अधिकांश उपयोग मामलों को कवर करेंगे।
हालाँकि, AppCompat CalendarView की तरह कुछ पर इसका सबसे अच्छा हिस्सा यह है कि यह एक तरह से बनाया गया है। इसलिए, इसे आसानी से बढ़ाया जा सकता है और विशिष्ट उपयोग के मामलों के लिए संशोधित किया जा सकता है, जबकि ऐसी चीजों को पूरा करने में बहुत कठिन होगा।
विशेष धन्यवाद
मैं कुछ लोगों को उजागर करना चाहता हूँ जिन्होंने इस लेख की सह-समीक्षा की:
- निक राउत ( Github )
- माइक वोल्फसन ( Github )
- रयान फिलिप्स ( लिंक्डइन )
- लुकास मूलेर्स ( Github )
- पटेल के साथ ( लिंक्डइन )
अपने दोस्तों के साथ साझा करें: