अपने ऐप्लिकेशन में पिकर जोड़ें

Android, लोगों को समय और तारीख चुनने के कंट्रोल देता है इस्तेमाल के लिए तैयार डायलॉग. ये पिकर हर एक को चुनने के लिए कंट्रोल देते हैं समय का कोई हिस्सा (घंटा, मिनट, AM/PM) या तारीख (महीना, दिन, साल).

content.io से टाइम पिकर का एक उदाहरण
पहली इमेज. मोबाइल कैलेंडर पिकर में घंटा चुनना.

इन पिकर का इस्तेमाल करके, यह पक्का करने में मदद मिलती है कि उपयोगकर्ता कोई समय या तारीख चुन सकते हैं मान्य हो, सही तरीके से फ़ॉर्मैट किया गया हो, और उपयोगकर्ता की जगह के हिसाब से अडजस्ट हो.

content.io से मॉडल तारीख चुनने वाले टूल का एक उदाहरण
दूसरी इमेज. मोडल तारीख चुनने वाला टूल.

हमारा सुझाव है कि आप DialogFragment अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है का इस्तेमाल करें. DialogFragment, आपके लिए डायलॉग लाइफ़साइकल. इसकी मदद से, पिकर अलग-अलग लेआउट में दिखाए जा सकते हैं कॉन्फ़िगरेशन, जैसे कि हैंडसेट पर किसी बेसिक डायलॉग या इसके एम्बेड किए गए हिस्से के तौर पर बड़ी स्क्रीन पर लेआउट इस्तेमाल किया जा सकता है.

टाइम पिकर टूल बनाना

किसी प्रॉडक्ट को दिखाने के लिए TimePickerDialog अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है DialogFragment का इस्तेमाल करके, ऐसी फ़्रैगमेंट क्लास तय करें जो बढ़ती है DialogFragment और इससे एक TimePickerDialog वापस फ़्रैगमेंट onCreateDialog() तरीका.

टाइम पिकर के लिए Dialogफ़्रैगमेंट को बढ़ाना

TimePickerDialog के लिए DialogFragment तय करने के लिए, ये काम करें:

  • इसका इंस्टेंस दिखाने के लिए, onCreateDialog() तरीका तय करें TimePickerDialog.
  • लागू करें TimePickerDialog.OnTimeSetListener अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इंटरफ़ेस का इस्तेमाल करता है.

यहां एक उदाहरण दिया गया है:

Kotlin

class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        // Use the current time as the default values for the picker.
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        // Create a new instance of TimePickerDialog and return it.
        return TimePickerDialog(activity, this, hour, minute, DateFormat.is24HourFormat(activity))
    }

    override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
        // Do something with the time the user picks.
    }
}

Java

public static class TimePickerFragment extends DialogFragment
                            implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker.
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it.
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time the user picks.
    }
}

TimePickerDialog क्लास में आपको कंस्ट्रक्टर आर्ग्युमेंट.

अब आपको बस एक ऐसे इवेंट की ज़रूरत है जो आपके गतिविधि.

समय चुनने वाला टूल दिखाएं

जैसा कि पिछले पेज में बताया गया है, DialogFragment तय करने के बाद उदाहरण के लिए, आप DialogFragment और show() तरीका.

उदाहरण के लिए, यहां एक बटन दिया गया है. इस बटन को टैप करने पर, डायलॉग:

<Button
    android:id="@+id/pickTime"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pick time" />

जब उपयोगकर्ता इस बटन पर टैप करता है, तो सिस्टम यह तरीका अपनाता है:

Kotlin

findViewById<Button>(R.id.pickTime).setOnClickListener {
    TimePickerFragment().show(supportFragmentManager, "timePicker")
}

Java

findViewById<Button>(R.id.pickTime).setOnClickListener {
    TimePickerFragment().show(supportFragmentManager, "timePicker");
}

यह तरीका show() को पिछले उदाहरण में DialogFragment के बारे में बताया गया है. कॉन्टेंट बनाने show() तरीके के लिए, FragmentManager और फ़्रैगमेंट के लिए एक यूनीक टैग नाम डालें.

तारीख चुनने वाला टूल बनाना

किसी DatePickerDialog अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है TimePickerDialog बनाने जैसा है. दोनों में अंतर है, डायलॉग जिसे आपने फ़्रैगमेंट के लिए बनाया है.

DialogFragment का इस्तेमाल करके DatePickerDialog दिखाने के लिए, एक फ़्रैगमेंट क्लास परिभाषित करें, जो DialogFragment का विस्तार करे और फ़्रैगमेंट के onCreateDialog() से DatePickerDialog तरीका.

तारीख चुनने वाले टूल के लिए Dialogफ़्रैगमेंट को बढ़ाना

DatePickerDialog के लिए DialogFragment तय करने के लिए, ये काम करें:

  • इसका इंस्टेंस दिखाने के लिए, onCreateDialog() तरीका तय करें DatePickerDialog.
  • लागू करें DatePickerDialog.OnDateSetListener अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इंटरफ़ेस, एक कॉलबैक रिसीव करने के लिए होता है.

यहां एक उदाहरण दिया गया है:

Kotlin

class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        // Use the current date as the default date in the picker.
        val c = Calendar.getInstance()
        val year = c.get(Calendar.YEAR)
        val month = c.get(Calendar.MONTH)
        val day = c.get(Calendar.DAY_OF_MONTH)

        // Create a new instance of DatePickerDialog and return it.
        return DatePickerDialog(requireContext(), this, year, month, day)

    }

    override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
        // Do something with the date the user picks.
    }
}

Java

public static class DatePickerFragment extends DialogFragment
                            implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker.
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it.
        return new DatePickerDialog(requireContext(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date the user picks.
    }
}

ज़्यादा जानकारी के लिए, DatePickerDialog अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है क्लास का इस्तेमाल करें.

आपको बस एक ऐसे इवेंट की ज़रूरत है जो आपके गतिविधि.

तारीख चुनने वाला टूल दिखाएं

पिछले उदाहरण की तरह, DialogFragment तय करने के बाद, आप DialogFragment पर कॉल किया जा रहा है और show() पर कॉल किया जा रहा है.

उदाहरण के लिए, यहां एक बटन दिया गया है. इस बटन को टैप करने पर, डायलॉग:

<Button
    android:id="@+id/pickDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pick date"/>

जब उपयोगकर्ता इस बटन पर टैप करता है, तो सिस्टम यह तरीका अपनाता है:

Kotlin

findViewById<Button>(R.id.pickDate).setOnClickListener {
    val newFragment = DatePickerFragment()
    newFragment.show(supportFragmentManager, "datePicker")
}

Java

findViewById<Button>(R.id.pickDate).setOnClickListener {
    val newFragment = DatePickerFragment();
    newFragment.show(supportFragmentManager, "datePicker");
}

यह तरीका show() को पिछले उदाहरण में DialogFragment के बारे में बताया गया है. कॉन्टेंट बनाने show() तरीके के लिए, FragmentManager का इंस्टेंस ज़रूरी है और फ़्रैगमेंट के लिए एक यूनीक टैग नाम डालें.

ऑटोमैटिक भरने की सुविधा के साथ पिकर का इस्तेमाल करना

Android ने साल 2017 में, ऑटोमैटिक भरने वाला फ़्रेमवर्क, जो उपयोगकर्ता ऐसा डेटा सेव करते हैं जिसका इस्तेमाल अलग-अलग ऐप्लिकेशन में फ़ॉर्म भरने के लिए किया जा सकता है. पिकर इस सुविधा का इस्तेमाल, ऐसा यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराकर किया जा सकता है जो जानकारी ऑटोमैटिक भरने की सुविधा की मदद से, ऐसी फ़ील्ड की वैल्यू जिसमें तारीख या समय का डेटा सेव किया जाता है. उदाहरण के लिए, क्रेडिट कार्ड में फ़ॉर्म की मदद से, डेट पिकर की मदद से उपयोगकर्ता अपने क्रेडिट कार्ड.

पिकर डायलॉग होते हैं. इसलिए, उन्हें किसी गतिविधि में साथ में नहीं दिखाया जाता अन्य फ़ील्ड. पिकर न दिखने पर, पिकर का डेटा दिखाने के लिए, ये काम करें किसी दूसरे व्यू का इस्तेमाल करें, जैसे कि EditText, इसकी मदद से, पिकर के न दिखने पर वैल्यू देखी जा सकती है.

EditText ऑब्जेक्ट, मूल रूप से, टाइप के अपने-आप भरने वाले डेटा की उम्मीद करता है AUTOFILL_TYPE_TEXT. वहीं दूसरी ओर, ऑटोमैटिक भरने की सुविधा, डेटा को इस तरह सेव करती है: AUTOFILL_TYPE_DATE अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ताकि उसे सही तरीके से दिखाया जा सके. गड़बड़ी को ठीक करने के लिए, टाइप किया है, तो हमारा सुझाव है कि आप ऐसा कस्टम व्यू बनाएं जो EditText और यह उन तरीकों को लागू करता है जो सही तरीके से हैंडल करने के लिए ज़रूरी होते हैं AUTOFILL_TYPE_DATE टाइप की वैल्यू.

EditText की एक सब-क्लास बनाने के लिए, यह तरीका अपनाएं AUTOFILL_TYPE_DATE टाइप की वैल्यू हैंडल कर सकता है:

  1. ऐसी क्लास बनाएं जो EditText से इनहेरिट करे.
  2. लागू करें getAutofillType() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है तरीका है, जिससे AUTOFILL_TYPE_DATE मिलता है.
  3. लागू करें getAutofillValue() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है तरीका, जो नतीजे के तौर पर AutofillValue ऑब्जेक्ट है जो मिलीसेकंड में तारीख दिखाता है. रिटर्न तैयार करने के लिए ऑब्जेक्ट को ढूंढने के लिए, forDate() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है AutofillValue ऑब्जेक्ट जनरेट करने का तरीका.
  4. लागू करें autofill() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है तरीका. यह तरीका URL को हैंडल करने के लिए AutofillValue पैरामीटर, जो इस तरह का है AUTOFILL_TYPE_DATE. पैरामीटर को हैंडल करने के लिए, एक उचित बनाएं स्ट्रिंग के रूप में दिखाया जाएगा, जैसे कि mm/yyyy. स्ट्रिंग का इस्तेमाल करें निरूपण का इस्तेमाल करके अपने व्यू की text प्रॉपर्टी सेट करें.
  5. वह फ़ंक्शन लागू करें जो उपयोगकर्ता को बदलाव करने के दौरान पिकर दिखाता है EditText की कस्टम सब-क्लास में तारीख. व्यू अपडेट हो जाता है वैल्यू को स्ट्रिंग के तौर पर दिखाने वाली text प्रॉपर्टी जिसे उपयोगकर्ता, पिकर पर चुनता है.

EditText की ऐसी सब-क्लास के उदाहरण के लिए जो AUTOFILL_TYPE_DATE वैल्यू, इनमें ऑटोमैटिक भरने की सुविधा का फ़्रेमवर्क सैंपल देखें Java या कोटलिन.

अपने कस्टम व्यू के लिए, जानकारी ऑटोमैटिक भरने की सुविधा साबित करने के बारे में ज़्यादा जानने के लिए, यहां जाएं ऑटोमैटिक भरने वाला फ़्रेमवर्क.