অ্যান্ড্রয়েডে একটি তারিখ এবং সময় চয়নকারী কীভাবে তৈরি করবেন? [বন্ধ]


128

এমন কোনও অ্যান্ড্রয়েড উইজেট রয়েছে যা একই সাথে তারিখ এবং সময়টি বেছে নিতে সক্ষম হয়? আমি ইতিমধ্যে বেসিক সময় চয়নকারী এবং তারিখ চয়নকারী ব্যবহার করি

তবে সেগুলি সেক্সি এবং ব্যবহারকারী বান্ধব নয় (আমি খুঁজে পেয়েছি)। আপনি কি জানেন যে কোনও উইজেট যদি তারিখ এবং সময় উভয়ই অন্তর্ভুক্ত থাকে?

অনেক অনেক ধন্যবাদ, লুক

উত্তর:


52

অ্যান্ড্রয়েডে এমন কোনও বিল্ট নেই যা এটি সরবরাহ করে।

সম্পাদনা: অ্যান্ড্রিওড এখন অন্তর্নির্মিত পিকারগুলি সরবরাহ করে। @ উত্তর উত্তর পরীক্ষা করুন


2
আমি জানি এই প্রতিক্রিয়াটি এক বছরের বেশি পুরানো, তবে আমি মনে করি এই প্রতিক্রিয়াটি আপডেট হওয়া উচিত। নীচে সমস্তভাবে রাবি দ্বারা উল্লেখ করা ডেটস্লাইডার গ্রন্থাগার এটির জন্য উপযুক্ত বলে মনে হচ্ছে।
স্টিফান ব্র্যাঞ্জিক

আমি সম্মত এই উত্তরটি আপডেট করা উচিত কারণ এটি দুর্দান্ত একটি উইজেট। তবে রাবির নির্দেশিত কোডটি ইতিমধ্যে কিছুটা পুরানো এবং এতে কিছু অবচয় পদ্ধতি রয়েছে showDialog। খুব শীঘ্রই সম্ভবত আরও কিছু বর্তমান আসবে।
ইউজিন ভ্যান ডের মেরভে

13
আসলে উত্তরটি সঠিক এবং আপডেট করা উচিত নয় should এমনকি অ্যান্ড্রয়েডডেটস্লাইডার উপস্থিত থাকলেও অ্যান্ড্রয়েডে এমন কিছু তৈরি করা নেই যা সেই বৈশিষ্ট্যটি সরবরাহ করে।
ক্রিশ্চিয়ান

4
আমি কি একমাত্র এই বিষয়টি নিয়েই অবাক হয়েছি যে গুগল এমনকি কোনও ব্যবসায়ের অ্যাপ্লিকেশনগুলিতে সর্বাধিক ব্যবহৃত নিয়ন্ত্রণগুলির একটিটিকে সমর্থন করে না?
l46kok

76

উভয় DatePickerএবং TimePickerএকটি বিন্যাসে এক্সএমএল রাখুন ।

date_time_picker.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:padding="8dp"
    android:layout_height="match_parent">

    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="match_parent"
        android:calendarViewShown="true"
        android:spinnersShown="false"
        android:layout_weight="4"
        android:layout_height="0dp" />

    <TimePicker
        android:id="@+id/time_picker"
        android:layout_weight="4"
        android:layout_width="match_parent"
        android:layout_height="0dp" />

    <Button
        android:id="@+id/date_time_set"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:text="Set"
        android:layout_height="0dp" />

</LinearLayout>

কোড:

final View dialogView = View.inflate(activity, R.layout.date_time_picker, null);
final AlertDialog alertDialog = new AlertDialog.Builder(activity).create();

dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

         DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.date_picker);
         TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.time_picker);

         Calendar calendar = new GregorianCalendar(datePicker.getYear(),
                            datePicker.getMonth(),
                            datePicker.getDayOfMonth(),
                            timePicker.getCurrentHour(),
                            timePicker.getCurrentMinute());

         time = calendar.getTimeInMillis();
         alertDialog.dismiss();
    }});
alertDialog.setView(dialogView);
alertDialog.show();

2
উজ্জ্বল উদাহরণ, ধন্যবাদ। একটি পয়েন্ট ... আপনি সম্ভবত সতর্কতা ডায়ালগ.ডিজমিস () রাখতে চান; অনক্লিক বাস্তবায়ন শেষে।
জোনাথন

এই উদাহরণে বছর বাছাই করতে পারে না।
ট্রান্সলেশন

কেবল একটি সমস্যা ... অ্যান্ড্রয়েড এল-এ ব্যবহার করার সময় তারিখ এবং সময় চয়নকারী স্ক্রিনে খাপ খায় না ... তাই আমি লিনিয়ারলআউটটিকে একটি স্ক্রোলভিউতে রাখি ... এখন সমস্যাটি যখন আমি সময় পরিবর্তন করার চেষ্টা করি তখন লেআউট স্ক্রোলগুলি হয় কারণ স্ক্রোলভিউ..এর কোনও সমাধান
ডমিনিক ডি সুজা

দয়া করে সহায়তা করুন, এটি ল্যান্ডস্কেপ মোডে উপযুক্ত নয়, কীভাবে এটি ঠিক করবেন
আবেদেশ

1
অ্যান্ড্রয়েড .0.০+
এফ

64

এই ফাংশনটি ব্যবহার করুন এটি আপনাকে একের পর এক তারিখ এবং সময় বাছাই করতে সক্ষম করবে এবং এরপরে এটি বৈশ্বিক চলক তারিখে সেট করবে। কোনও লাইব্রেরি নেই এক্সএমএল।

Calendar date;
public void showDateTimePicker() {
   final Calendar currentDate = Calendar.getInstance();
   date = Calendar.getInstance();
   new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() {
       @Override
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            date.set(year, monthOfYear, dayOfMonth);
            new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    date.set(Calendar.HOUR_OF_DAY, hourOfDay);
                    date.set(Calendar.MINUTE, minute);
                    Log.v(TAG, "The choosen one " + date.getTime());
                }
            }, currentDate.get(Calendar.HOUR_OF_DAY), currentDate.get(Calendar.MINUTE), false).show();
       }
   }, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE)).show();
}

একটি সহজ উপায়
ভিকি ঠাকুর

3
কল এপিআই স্তর প্রয়োজন 24.
RRaj

27

অ্যান্ড্রয়েডের জন্য ডায়ালগফ্র্যাগমেন্টে ডেটপিক এবং টাইমপিকার একত্রিত

এটি করার জন্য আমি একটি গ্রন্থাগার তৈরি করেছি । এটিতেও কাস্টমাইজেবল রঙ রয়েছে!

এটি ব্যবহার করা খুব সহজ।

প্রথমে আপনি একটি শ্রোতা তৈরি করুন:

private SlideDateTimeListener listener = new SlideDateTimeListener() {

    @Override
    public void onDateTimeSet(Date date)
    {
        // Do something with the date. This Date object contains
        // the date and time that the user has selected.
    }

    @Override
    public void onDateTimeCancel()
    {
        // Overriding onDateTimeCancel() is optional.
    }
};

তারপরে আপনি ডায়ালগটি তৈরি এবং দেখান:

new SlideDateTimePicker.Builder(getSupportFragmentManager())
    .setListener(listener)
    .setInitialDate(new Date())
    .build()
    .show();

আশা করি এটি আপনার কাজে লাগবে।


সত্যিই ভাল! আমার সময় বাঁচায়! ধন্যবাদ! তবে, আমাকে কোডটি ক্লোন করতে হয়েছিল, কারণ আমি মনে করি গ্রেডেল নির্ভরতা স্ট্রিংটি বৈধ নয়?
কুলদীপ

@ কে 2 আইজিন প্রকল্পের গিট পৃষ্ঠাটি পুরো মডিউলটি আমদানি করতে বা "কোডটি ক্লোন করতে" বলেছে, মূল কথাটি, তিনি কোনও দুর্দান্ত ভাণ্ডারে তাঁর দুর্দান্ত সময়-পিক প্রকাশ করেন নি। জেডিজে দুর্দান্ত কাজের মানুষ, দুর্দান্ত কাজ।
নিনজা কোডিং

@ জেডিজে দুঃখিত, তবে আমি আমার প্রকল্পে আপনার গ্রন্থাগারটি যুক্ত করতে পারিনি, আপনি কীভাবে ব্যাখ্যা করতে পারেন?
সেবাস্তিয়ান দেলগাদো

3
পদক্ষেপ 1 "ক্লোন বা ডাউনলোড" ক্লিক করে পুরো প্রকল্পটি ডাউনলোড করুন এবং তারপরে " জিপ ডাউনলোড করুন" পদক্ষেপ 2 এক্সট্র্যাক্ট জিপ সামগ্রী, বা কেবল জিপ \ স্লাইডডেটটাইমপিকার-মাস্টার \ স্লাইডডেটটাইমপিকার ফোল্ডার এবং সেই ফোল্ডারটি আপনার বিদ্যমান প্রকল্পের মূল ফোল্ডারের ধারকটিতে অনুলিপি করুন আপনি প্লাগইন যুক্ত করতে চান। পদক্ষেপ 3 সংকলন প্রকল্পের সাথে গ্রেডলের মাধ্যমে নির্ভরতা যুক্ত করুন (': স্লাইডডেটটাইমপিকার') বা অ্যান্ড্রয়েড স্টুডিও সহ: ফাইল> নতুন> আমদানি প্রকল্প এবং প্রযোজ্য ফোল্ডারটি নির্বাচন করুন এবং প্রকল্প আমদানি কনফিগার করুন সাধারণত গ্রহণ করুন এবং পরবর্তী এবং সমাপ্ত করুন।
নিনজা কোডিং

2
@ জেডিজে আমাদের একটি ললিপপ বা মার্শমালোতে নেটিভ ডেটপিকার এবং টাইম পিকার প্রদর্শিত হয় না, পরিবর্তে প্রাক-ললিপপ উপাদানগুলি দেখায়।
নিনজা কোডিং

20

DatePickerআপডেট সময় পদ্ধতিতে সময় চয়নকারী ডায়ালগ কল করুন । এটি একই সাথে কল করা হবে না তবে আপনি যখন DatePickerসেট বোতাম টিপেন তখন। সময় চয়নকারী ডায়ালগটি খুলবে। পদ্ধতিটি নীচে দেওয়া হল।

package com.android.date;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;

public class datepicker extends Activity {

    private TextView mDateDisplay;
    private Button mPickDate;
    private int mYear;
    private int mMonth;
    private int mDay;
    private TextView mTimeDisplay;
    private Button mPickTime;

    private int mhour;
    private int mminute;

    static final int TIME_DIALOG_ID = 1;

    static final int DATE_DIALOG_ID = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mDateDisplay =(TextView)findViewById(R.id.date);
        mPickDate =(Button)findViewById(R.id.datepicker);
        mTimeDisplay = (TextView) findViewById(R.id.time);
        mPickTime = (Button) findViewById(R.id.timepicker);

        //Pick time's click event listener
        mPickTime.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                showDialog(TIME_DIALOG_ID);
            }
        });

        //PickDate's click event listener 
        mPickDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDialog(DATE_DIALOG_ID);
            }
        });

        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
        mhour = c.get(Calendar.HOUR_OF_DAY);
        mminute = c.get(Calendar.MINUTE);
    }

    //-------------------------------------------update date---//    
    private void updateDate() {
        mDateDisplay.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mDay).append("/")
                    .append(mMonth + 1).append("/")
                    .append(mYear).append(" "));
        showDialog(TIME_DIALOG_ID);
    }

      //-------------------------------------------update time---//    
    public void updatetime() {
        mTimeDisplay.setText(
                new StringBuilder()
                        .append(pad(mhour)).append(":")
                        .append(pad(mminute))); 
    }

    private static String pad(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);


    //Datepicker dialog generation  

    private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
                updateDate();
            }
        };


     // Timepicker dialog generation
        private TimePickerDialog.OnTimeSetListener mTimeSetListener =
            new TimePickerDialog.OnTimeSetListener() {
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    mhour = hourOfDay;
                    mminute = minute;
                    updatetime();
                }
            };

        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DATE_DIALOG_ID:
                return new DatePickerDialog(this,
                            mDateSetListener,
                            mYear, mMonth, mDay);

            case TIME_DIALOG_ID:
                return new TimePickerDialog(this,
                        mTimeSetListener, mhour, mminute, false);

            }
            return null;
        }
}

মূল.এক্সএমএল নীচে দেওয়া হয়েছে

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"/>

    <TextView android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""/>

    <Button
        android:id="@+id/timepicker"
        android:text="Change Time" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"/>

    <TextView 
        android:id="@+id/date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""/>

    <Button android:id="@+id/datepicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="200dp"
        android:text="Change the date"/>

</LinearLayout>

14

আমি একটি ডেটপিকার এবং একটি সময় পিকার একত্রিত করতে চেয়েছিলাম। সুতরাং আমি উভয়কে একটি ইন্টারফেসে পরিচালনা করতে একটি এপিআই তৈরি করি! :)

https://github.com/Kunzisoft/Android-SwitchDateTimePicker

এখানে চিত্র বর্ণনা লিখুন

আপনি সাব্লাইমপিকার ব্যবহার করতে পারেন


খুব সুন্দর মার্জিত সমাধান। দুর্দান্ত কাজ করে। আমি কয়েকটি ছোট বিবরণে ছুটে এসেছি .. 1) এএম / পিএম লেবেলটি কেটে ফেলা হচ্ছে, সুতরাং আমাকে স্টাইলের মধ্যে একটি ছোট ফন্টের আকার সেট করতে হয়েছিল: <item name="android:textSize">11sp</item> এবং সাহসী সেটিংটি সরিয়ে ফেলতে হয়েছিল। 2) দেখে মনে হচ্ছে কল করা setDefaultDateTime(..)উচিত বা আপনি একটি রানটাইম ব্যতিক্রম পেয়েছেন .. সুতরাং আমি কেবল Calendar.getInstance().getTime()পরামিতি হিসাবে এটি কল করি । আমি এখনও অবধি একটি তারিখ চয়নকারের জন্য সেরা গিথুব প্রকল্পটি ভাগ করে নেওয়ার জন্য ধন্যবাদ
জেন বো বো

13

কোনও সময় চয়নকারী এবং একটি তারিখ চয়নকার সহ অন্য একটি ডায়ালগ কীভাবে পপ আপ করবেন তা দেখানোর জন্য আপনার লিঙ্ক করা URL গুলি। তবে আপনার সচেতন হওয়া দরকার যে আপনি সেই ইউআই উইজেটগুলি সরাসরি আপনার নিজের বিন্যাসে ব্যবহার করতে পারেন। আপনি আপনার নিজস্ব ডায়লগ তৈরি করতে পারেন যা একই দৃষ্টিভঙ্গিতে টাইমপিকার এবং ডেটপিকার উভয়কেই অন্তর্ভুক্ত করতে পারে, এইভাবে আপনি যা খুঁজছেন তা আমি পূরণ করে lish

অন্য কথায়, টাইম পিকারডায়ালগ এবং ডেটপিকার ডায়ালগ ব্যবহার না করে কেবল আপনার নিজস্ব ডায়ালগ বা ক্রিয়াকলাপে সরাসরি ইউআই উইজেটগুলি টাইমপিকার এবং ডেটপিকার ব্যবহার করুন ।


1
আমি সম্মত হলাম @ জয়দীপ খামারের সমাধানটি যা চাওয়া হয়েছে তা নয়, এগুলি দুটি পৃথক সংলাপ খুলছে opening এটি ইতিমধ্যে সংযুক্ত যেখানে বেসিক নমুনা কোড দেখতে ভাল হবে।
ইউজিন ভ্যান ডের মেরভে

9

আমি আমার একটি প্রকল্পে একই সমস্যার মুখোমুখি হয়েছি এবং একটি ব্যবহারকারী বান্ধব সংলাপে তারিখ এবং সময় চয়নকারী উভয়কেই এমন একটি কাস্টম উইজেট তৈরি করার সিদ্ধান্ত নিয়েছি। আপনি http://code.google.com/p/datetimepicker/ এ উদাহরণ সহ উত্স কোডটি পেতে পারেন । কোডটি অ্যাপাচি ২.০ এর আওতায় লাইসেন্সযুক্ত।


6

আমি অ্যান্ড্রয়েড-ডেটলাইডার প্রকল্পটি কাঁটাচামচ, আপডেট, রিফ্যাক্টর এবং মভেনাইজ করেছি। এটি এখন গিথুব:

https://github.com/casidiablo/date-slider


2
কীভাবে এটি ব্যবহার করবেন আপনার একটি উদাহরণ আছে?
রজার কিস

5

আপনি wdullaer / EquipmentDateTimePicker এর মধ্যে একটি ব্যবহার করতে পারেনDatePicker library

  • প্রথম শো ডেটপিকার।

    private void showDatePicker() {
    Calendar now = Calendar.getInstance();
    DatePickerDialog dpd = DatePickerDialog.newInstance(
            HomeActivity.this,
            now.get(Calendar.YEAR),
            now.get(Calendar.MONTH),
            now.get(Calendar.DAY_OF_MONTH)
    );
    dpd.show(getFragmentManager(), "Choose Date:");
    }
  • তারপর onDateSet callback store date & show TimePicker

    @Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, monthOfYear, dayOfMonth);
    filter.setDate(cal.getTime());
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            showTimePicker();
        }
    },500);
    }
  • উপর onTimeSet callbackদোকান সময়

     @Override
     public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
    Calendar cal = Calendar.getInstance();
    if(filter.getDate()!=null)
        cal.setTime(filter.getDate());
    cal.set(Calendar.HOUR_OF_DAY,hourOfDay);
    cal.set(Calendar.MINUTE,minute);
    }


2

অন্য বিকল্পটি হ'ল অ্যান্ড্রয়েড-হুইল প্রকল্প যা আইওএসের ইউআইডিএটপিকার ডায়ালগটি বেশ কাছে আসে।

এটি কোনও কিছু বাছাই করতে একটি উল্লম্ব স্লাইডার সরবরাহ করে (তারিখ এবং সময় সহ)। আপনি যদি অনুভূমিক স্লাইডারটিকে পছন্দ করেন তবে রাবি কর্তৃক উল্লেখ করা ডেটস্লাইডার আরও ভাল।


ছিন্ন সুত্র. এখানে অ্যান্ড্রয়েড-হুইলের একটি কাঁটাচামচ
jk7


1

আমি একটি সতর্কতা ডায়ালগ তৈরি করেছি যা তারিখ চয়নকারী এবং সময় চয়নকারীকে একত্রিত করে। আপনি https://github.com/nguyentoantuit/android এ কোড পেতে পারেন দ্রষ্টব্য: ডেটটাইমপিকার একটি লাইব্রেরি


1
নোট করুন যে কেবলমাত্র লিঙ্ক-উত্তরগুলি নিরুৎসাহিত করা হয়েছে, এসও উত্তরগুলি সমাধানের সন্ধানের শেষ-পয়েন্ট হওয়া উচিত (বনাম। রেফারেন্সগুলির মধ্যে আরও একটি স্টপওভার, যা সময়ের সাথে সাথে বাসি হয়ে যায়)। রেফারেন্স হিসাবে লিঙ্কটি রেখে এখানে দয়া করে এখানে একা একা সংক্ষিপ্তসার বিবেচনা করুন।
ক্লিওপাত্রা

1

একের পর এক ডায়লগ দেখানোর জন্য জয়দীপের ধারণার আরও কমপ্যাক্ট সংস্করণ এখানে। আমি এই সমাধানটি পছন্দ করি কারণ এর কোনও নির্ভরতা নেই।

        Date value = new Date();
        final Calendar cal = Calendar.getInstance();
        cal.setTime(value);
        new DatePickerDialog(this,
            new DatePickerDialog.OnDateSetListener() {
                @Override public void onDateSet(DatePicker view, 
                        int y, int m, int d) {
                    cal.set(Calendar.YEAR, y);
                    cal.set(Calendar.MONTH, m);
                    cal.set(Calendar.DAY_OF_MONTH, d);

                    // now show the time picker
                    new TimePickerDialog(NoteEditor.this,
                        new TimePickerDialog.OnTimeSetListener() {
                            @Override public void onTimeSet(TimePicker view, 
                                    int h, int min) {
                                cal.set(Calendar.HOUR_OF_DAY, h);
                                cal.set(Calendar.MINUTE, min);
                                value = cal.getTime();
                            }
                        }, cal.get(Calendar.HOUR_OF_DAY), 
                            cal.get(Calendar.MINUTE), true).show();
                 }
            }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH)).show();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.