एंड्रॉइड में डेट और टाइम पिकर कैसे बनाएं? [बन्द है]


128

क्या कोई एंड्रॉइड विजेट है जो एक ही समय में दिनांक और समय चुनने में सक्षम है? मैं पहले से ही बेसिक टाइम पिकर और डेट पिकर का उपयोग करता हूं ।

लेकिन वे उस सेक्सी और उपयोगकर्ता के अनुकूल नहीं हैं (मैंने पाया)। क्या आपको पता है कि तारीख और समय दोनों सहित एक विजेट मौजूद है?

बहुत बहुत धन्यवाद, ल्यूक

जवाबों:


52

एंड्रॉइड में कुछ भी नहीं बनाया गया है जो इसे प्रदान करता है।

EDIT: एंड्रियोड अब बिल्ट-इन पिकर प्रदान करता है। @ उत्तर की जाँच करें


2
मुझे पता है कि यह प्रतिक्रिया एक वर्ष से अधिक पुरानी है, लेकिन मुझे लगता है कि इस प्रतिक्रिया को अपडेट किया जाना चाहिए। DateSlider पुस्तकालय को रबी द्वारा संदर्भित सभी तरह से इसके लिए एकदम सही लगता है।
स्टीफ़न ब्रांज़की

मैं मानता हूं कि इस उत्तर को अद्यतन किया जाना चाहिए क्योंकि यह एक भयानक विजेट है। हालाँकि रबी द्वारा बताया गया कोड पहले से ही थोड़ा पुराना है और इसमें कुछ पदावनत विधियाँ शामिल हैं जैसे showDialog। शायद कुछ और करंट जल्द ही साथ आएगा।
यूजीन वैन डेर मेरवे

13
वास्तव में उत्तर सही है और इसे अपडेट नहीं किया जाना चाहिए। यहां तक ​​कि अगर AndroidDateSlider मौजूद है, तो एंड्रॉइड में कुछ भी नहीं बनाया गया है जो उस सुविधा को प्रदान करता है।
क्रिस्टियन

4
क्या मैं केवल इस तथ्य पर चकित हूं कि Google किसी भी व्यावसायिक अनुप्रयोगों में सबसे अधिक उपयोग किए जाने वाले नियंत्रणों में से एक का भी समर्थन नहीं करता है?
l46kok

76

दोनों को DatePickerऔर TimePickerएक लेआउट में डालें XML।

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
शानदार उदाहरण, धन्यवाद। एक बिंदु ... आप शायद सतर्क करना चाहते हैंDialog.dismiss (); onClick कार्यान्वयन के अंत में।
जोनाथन

इस उदाहरण में वर्ष नहीं चुन सकते।
lostintranslation

बस एक समस्या ... एंड्रॉइड L का उपयोग करते समय तारीख और समय लेने वाला स्क्रीन पर फिट नहीं होता है..तो मैंने linearLayout को स्क्रॉलव्यू में रखा है ... अब समस्या यह है कि जब मैं लेआउट को स्क्रॉल करने का समय बदलने की कोशिश करता हूं स्क्रॉल दृश्य के कारण..इसका कोई समाधान
डोमिनिक डिसूजा

कृपया मदद करें, यह लैंडस्केप मोड में फिट नहीं है, इसे कैसे ठीक करें
अवधेश

1
Android 6.0+ यह लेआउट बदसूरत लग रहा है; ( static.pychat.org/photo/f1qRFo31_Screenshot_20170214-123713.png
deathangel908

64

इस फ़ंक्शन का उपयोग करें यह आपको एक-एक करके तारीख और समय को खींचने में सक्षम करेगा और फिर इसे वैश्विक चर दिनांक पर सेट करेगा। कोई पुस्तकालय नहीं XML।

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

एंड्रॉइड के लिए DialogFragment में संयुक्त DatePicker और TimePicker

मैंने ऐसा करने के लिए एक लाइब्रेरी बनाई । यह भी अनुकूलन रंग है!

यह उपयोग करने के लिए बहुत सरल है।

सबसे पहले आप एक श्रोता बनाएँ:

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

मुझे उम्मीद है कि आप इसे उपयोगी पाएँ।


वास्तव में एक अच्छा! मेरा समय बचाया! धन्यवाद ! हालाँकि, मुझे कोड का क्लोन बनाना था, क्योंकि मुझे लगता है कि ग्रेडेल निर्भरता स्ट्रिंग मान्य नहीं है?
कुलदीप

@ k2ibegin प्रोजेक्ट का git पेज पूरे मॉड्यूल को आयात करने के लिए कहता है या "कोड को क्लोन करता है", इस बात को पूरा करता है, उन्होंने किसी भी रिपॉजिटरी में अपने भयानक तारीख-समय-पिकर को प्रकाशित नहीं किया। JDJ अच्छा काम आदमी, महान परिवाद।
निंजा कोडिंग

@JDJ क्षमा करें, लेकिन मैं अपनी लाइब्रेरी को मेरी परियोजना में जोड़ने में सक्षम नहीं हूं, क्या आप बता सकते हैं कि कैसे?
सेबस्टियन डेलगाडो

3
चरण 1 "क्लोन या डाउनलोड" पर क्लिक करके पूरी परियोजना को डाउनलोड करें और फिर "ज़िप डाउनलोड करें" चरण 2 एक्सट्रेक्ट ज़िप सामग्री, या सिर्फ ZIP \ SlideDateTimePicker- Master \ SlideDateTimePicker फ़ोल्डर पर कॉपी करें और उस फ़ोल्डर को अपने मौजूदा प्रोजेक्ट के रूट फ़ोल्डर कंटेनर में कॉपी करें आप प्लगइन जोड़ना चाहते हैं। चरण 3 संकलन परियोजना के साथ ग्रेड के माध्यम से निर्भरता जोड़ें (': SlideDateTimePicker') या Android स्टूडियो के साथ: फ़ाइल> नई> आयात परियोजना और निकाले गए फ़ोल्डर का चयन करें और परियोजना के आयात को सामान्य रूप से स्वीकार और अगला और खत्म कॉन्फ़िगर करें।
निंजा कोडिंग

2
@JDJ में हमारे पास एक बग है, लॉलीपॉप पर या मार्शमैलो देशी DatePicker और TimePicker नहीं दिखाया गया है, इसके बजाय पूर्व लॉलीपॉप घटकों को दर्शाता है।
निंजा कोडिंग

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;
        }
}

main.xml नीचे दिया गया है

<?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

मैं एक DatePicker और एक TimePicker को संयोजित करना चाहता था। तो मैं एक इंटरफ़ेस में दोनों को संभालने के लिए एक एपीआई बनाता हूं! :)

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

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

आप SublimePicker का भी उपयोग कर सकते हैं


बहुत अच्छा सुरुचिपूर्ण समाधान। बहुत अच्छा काम करता है। कुछ छोटे विवरण जो मैं भाग गया .. 1) एएम / पीएम लेबल छोटा हो रहा था, इसलिए मुझे शैली में एक छोटा फ़ॉन्ट आकार सेट करना पड़ा: <item name="android:textSize">11sp</item> और बोल्ड सेटिंग हटा दें। 2) ऐसा लगता है कि setDefaultDateTime(..)बुलाया जाना चाहिए या आपको एक रनटाइम अपवाद मिल सकता है .. इसलिए मैं Calendar.getInstance().getTime()इसे पैरामीटर के रूप में कहता हूं । डेट पिकर के लिए सर्वश्रेष्ठ गितुब परियोजना मैंने अब तक देखी है - इसे साझा करने के लिए धन्यवाद
जीन बो

13

आपके द्वारा लिंक किए गए URL, यह दिखाने के लिए कि किसी टाइम पिकर के साथ डायलॉग पॉप अप करें और डेट पिकर के साथ दूसरा डायलॉग। हालाँकि आपको इस बात की जानकारी होनी चाहिए कि आप उन UI विजेट्स को सीधे अपने लेआउट में उपयोग कर सकते हैं। आप अपना स्वयं का संवाद बना सकते हैं जिसमें एक ही समय में एक TimePicker और DatePicker दोनों शामिल हैं, इस प्रकार जो मुझे लगता है कि आप के लिए देख रहे हैं को पूरा करना।

दूसरे शब्दों में, TimePickerDialog और DatePickerDialog का उपयोग करने के बजाय, सीधे अपने स्वयं के संवाद या गतिविधि में UI विजेट्स TimePicker और DatePicker का उपयोग करें ।


1
मैं मानता हूं @ जयदीप खमर का हल जो नहीं मांगा गया है, वे दो अलग-अलग संवाद खोल रहे हैं। बेहतर होगा कि बेसिक सैंपल कोड देखें जहां यह पहले से ही संयुक्त है।
यूजीन वैन डेर मेरवे

9

मैं अपनी परियोजनाओं में एक ही समस्या का सामना कर रहा था और एक कस्टम विजेट बनाने का फैसला किया है जिसमें एक उपयोगकर्ता के अनुकूल संवाद में तारीख और समय लेने वाला दोनों हैं। आप http://code.google.com/p/datetimepicker/ पर एक उदाहरण के साथ स्रोत कोड प्राप्त कर सकते हैं । कोड अपाचे 2.0 के तहत लाइसेंस प्राप्त है।


6

मैंने एंड्रॉइड-डेटलाइडर प्रोजेक्ट को कांटेक्ट, अपडेट, रिफलेक्ट किया और मवीनाइज्ड किया। यह अब जीथूब पर है:

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


2
क्या आपके पास इसका उपयोग करने का एक उदाहरण है?
रोजर केय्स

5

आप wdullaer / MaterialDateTimePicker में से किसी एक का उपयोग कर सकते हैंDatePicker library

  • सबसे पहले DatePicker दिखाएं।

    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

एक अन्य विकल्प एंड्रॉइड-व्हील प्रोजेक्ट है जो आईओएस के यूडेटेटिकर संवाद के बहुत करीब आता है।

यह कुछ भी लेने के लिए एक ऊर्ध्वाधर स्लाइडर प्रदान करता है (तिथि और समय सहित)। यदि आप क्षैतिज स्लाइडर पसंद करते हैं, तो Rabi द्वारा संदर्भित DateSlider बेहतर है।


टूटी हुई कड़ी। यहाँ Android-Wheel का कांटा है
jk7


1

मैंने एक अलर्ट डायलॉग बनाया है जो डेट पिकर और टाइम पिकर को मिलाता है। आप https://github.com/nguyentoantuit/android पर कोड प्राप्त कर सकते हैं नोट: DateTimePicker एक पुस्तकालय है


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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.