আপনার অ্যাপে পিকার যোগ করা

Compose-এর মাধ্যমে চেষ্টা করুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-এ কীভাবে কম্পোনেন্ট যোগ করতে হয় তা জানুন।

Android ব্যবহারকারীকে সময় বা তারিখ বেছে নেওয়ার জন্য কন্ট্রোল প্রদান করে, যা ব্যবহারের জন্য প্রস্তুত ডায়ালগ হিসেবে থাকে। এই পিকার সময়ের প্রতিটি অংশ (ঘণ্টা, মিনিট, পূর্বাহ্ন/অপরাহ্ন) বা তারিখ (মাস, দিন, বছর) বেছে নেওয়ার জন্য কন্ট্রোল প্রদান করে।

material.io থেকে সময় বাছাইকারীর একটি উদাহরণ
ছবি ১. মোবাইল ক্যালেন্ডার পিকারে ঘণ্টা বেছে নেওয়া।

এইসব পিকার ব্যবহার করলে, আপনার ব্যবহারকারীরা যাতে সঠিক ফর্ম্যাটে, বৈধ এবং ব্যবহারকারীর লোকেলের সাথে মানানসই তারিখ বা সময় বেছে নিতে পারেন তা নিশ্চিত করা যায়।

material.io থেকে মডেল ডেট পিকারের একটি উদাহরণ
ছবি ২. মডেল ডেট পিকার।

প্রতিটি সময় বা ডেট পিকার হোস্ট করার জন্য আমরা আপনাকে DialogFragment ব্যবহার করার সাজেশন দিই। DialogFragment আপনার জন্য ডায়ালগ লাইফসাইকেল ম্যানেজ করে এবং আপনাকে বিভিন্ন লেআউট কনফিগারেশনে পিকার দেখাতে দেয়, যেমন হ্যান্ডসেটে বেসিক ডায়ালগ হিসেবে অথবা বড় স্ক্রিনে লেআউটের এম্বেড করা অংশ হিসেবে।

টাইম পিকার তৈরি করুন

DialogFragment ব্যবহার করে TimePickerDialog দেখাতে, ফ্র্যাগমেন্ট ক্লাস নির্ধারণ করুন যা DialogFragment-কে এক্সটেন্ড করে এবং ফ্র্যাগমেন্টের onCreateDialog() পদ্ধতি থেকে TimePickerDialog রিটার্ন করে।

টাইম পিকারের জন্য DialogFragment এক্সটেন্ড করুন

TimePickerDialog-এর জন্য DialogFragment নির্ধারণ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  • TimePickerDialog-এর ইনস্ট্যান্স ফিরিয়ে আনতে onCreateDialog() মেথডটি ডিফাইন করুন।
  • ব্যবহারকারী সময় সেট করলে কলব্যাক পাওয়ার জন্য 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.
    }
}

জাভা

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")
}

জাভা

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

এই মেথড পূর্ববর্তী উদাহরণে সংজ্ঞায়িত DialogFragment-এর একটি নতুন ইনস্ট্যান্সে show() কল করে। show() পদ্ধতির জন্য FragmentManager-এর একটি ইনস্ট্যান্স এবং ফ্র্যাগমেন্টের জন্য একটি অনন্য ট্যাগ নাম প্রয়োজন।

তারিখ বেছে নেওয়ার বিকল্প তৈরি করা

DatePickerDialog তৈরি করা মানে TimePickerDialog তৈরি করার মতো। পার্থক্য হল ফ্র্যাগমেন্টের জন্য আপনার তৈরি করা ডায়ালগ।

DialogFragment ব্যবহার করে DatePickerDialog দেখাতে, এমন একটি ফ্র্যাগমেন্ট ক্লাস নির্ধারণ করুন যা DialogFragment-কে এক্সটেন্ড করে এবং ফ্র্যাগমেন্টের onCreateDialog() মেথড থেকে একটি DatePickerDialog রিটার্ন করে।

ডেট পিকারের জন্য DialogFragment এক্সটেন্ড করুন

DatePickerDialog-এর জন্য DialogFragment নির্ধারণ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  • DatePickerDialog-এর ইনস্ট্যান্স ফিরিয়ে আনতে onCreateDialog() মেথডটি ডিফাইন করুন।
  • ব্যবহারকারী তারিখ সেট করলে কলব্যাক পেতে 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.
    }
}

জাভা

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")
}

জাভা

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

এই মেথড পূর্ববর্তী উদাহরণে সংজ্ঞায়িত DialogFragment-এর একটি নতুন ইনস্ট্যান্সে show() কল করে। show() পদ্ধতির জন্য FragmentManager-এর ইনস্ট্যান্স এবং ফ্র্যাগমেন্টের জন্য একটি অনন্য ট্যাগ নাম প্রয়োজন।

অটোফিলের সাথে পিকার ব্যবহার করা

২০১৭ সালে, Android অটোফিল ফ্রেমওয়ার্ক নিয়ে আসে, যা ব্যবহারকারীদের ডেটা সেভ করতে দেয় এবং সেই ডেটা বিভিন্ন অ্যাপে ফর্ম পূরণ করার জন্য ব্যবহার করা যায়। পিকার অটোফিল করার ক্ষেত্রে উপযোগী হতে পারে, কারণ এটি এমন UI প্রদান করে যার মাধ্যমে ব্যবহারকারী তারিখ বা সময়ের ডেটা স্টোর করে এমন ফিল্ডের ভ্যালু পরিবর্তন করতে পারেন। যেমন, ক্রেডিট কার্ডের ফর্মে, ডেট পিকার ব্যবহারকারীদের তাদের ক্রেডিট কার্ডের মেয়াদ শেষ হওয়ার তারিখ লিখতে বা পরিবর্তন করতে দেয়।

পিকার হল ডায়ালগ, তাই অন্যান্য ফিল্ডের সাথে অ্যাক্টিভিটিতে এগুলি দেখানো হয় না। পিকার দেখা না গেলে পিকার ডেটা দেখানোর জন্য, আপনি অন্য একটি ভিউ ব্যবহার করতে পারেন, যেমন 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 অবজেক্ট রিটার্ন করে। রিটার্ন অবজেক্ট তৈরি করতে, AutofillValue অবজেক্ট জেনারেট করার জন্য forDate() পদ্ধতি ব্যবহার করুন।
  4. autofill() পদ্ধতি প্রয়োগ করুন। এই পদ্ধতি AutofillValue প্যারামিটার ম্যানেজ করার লজিক প্রদান করে, যা AUTOFILL_TYPE_DATE ধরনের। প্যারামিটার ম্যানেজ করতে, এটির সঠিক স্ট্রিং রিপ্রেজেন্টেশন তৈরি করুন, যেমন mm/yyyy। আপনার ভিউয়ের text প্রপার্টি সেট করতে স্ট্রিং রিপ্রেজেন্টেশন ব্যবহার করুন।
  5. ব্যবহারকারী EditText-এর কাস্টম সাবক্লাসে তারিখ এডিট করতে চাইলে, পিকার দেখানোর কার্যকারিতা প্রয়োগ করুন। পিকার থেকে ব্যবহারকারীর বেছে নেওয়া ভ্যালুর স্ট্রিং উপস্থাপনার মাধ্যমে ভিউ text প্রপার্টি আপডেট করে।

EditText-এর সাবক্লাসের উদাহরণ হিসেবে, যা AUTOFILL_TYPE_DATE ভ্যালু ম্যানেজ করে, Java বা Kotlin-এ অটোফিল ফ্রেমওয়ার্ক স্যাম্পেল দেখুন।

আপনার কাস্টম ভিউয়ের জন্য অটোফিল সহায়তা প্রদান করার ব্যাপারে আরও জানতে, অটোফিল ফ্রেমওয়ার্ক দেখুন।