منتقي التاريخ والوقت في التطبيق الروبوت [مغلقة]

StackOverflow https://stackoverflow.com/questions/2055509

  •  20-09-2019
  •  | 
  •  

سؤال

هل هناك أي الروبوت القطعة التي تمكن من اختيار التاريخ والوقت في نفس الوقت ؟ انا بالفعل استخدم الأساسية الوقت المنتقى و منتقي التاريخ.

ولكنها ليست مثيرة وسهلة الاستعمال (وجدت).هل تعرف إذا كانت القطعة بما في ذلك التاريخ والوقت موجود ؟ شكرا جزيلا ، لوك

هل كانت مفيدة؟

المحلول

وليس هناك شيء صلب الروبوت التي تقدمها هذه.

وتحرير: ANDRIOD الآن العروض المدمج في جامعي. تحقق Oded الجواب

نصائح أخرى

وضع كل 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();

استخدم هذه الوظيفة التي سوف تمكنك من تاريخ ووقت الموافقة المسبقة عن علم واحدا تلو الآخر ثم تعيينها إلى تاريخ متغير عمومي. لا لا 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();
}

وأنا خلقت مكتبة للقيام بذلك. كما أن لديها تخصيص الألوان!

وانها بسيطة جدا للاستخدام.

أولا عليك إنشاء المستمع:

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

وآمل أن تجد أنه من المفيد.

واستدعاء الحوار منتقي الوقت في طريقة وقت التحديث 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>

ووعناوين URL التي تصل إلى إظهار كيفية يطفو على الحوار مع منتقي الوقت والحوار آخر مع منتقي التاريخ. ولكن عليك أن تكون على علم أنه يمكنك استخدام هذه الحاجيات UI مباشرة في التخطيط الخاص بك. هل يمكن بناء الحوار الخاص الذي يشمل كلا من TimePicker ومنتقي التاريخ في نفس وجهة النظر، وبالتالي تحقيق ما أعتقد أنك تبحث عنه.

وبعبارة أخرى، بدلا من استخدام TimePickerDialog وDatePickerDialog، واستخدام فقط UI الحاجيات <الصورة> <وأ href = "http://developer.android.com/intl/fr/reference/android/widget/TimePicker.html "يختلط =" noreferrer نوفولو "> TimePicker و <الصورة> <وأ href =" http://developer.android.com/intl/fr/reference/android/widget/DatePicker.html " يختلط = "noreferrer نوفولو"> منتقي التاريخ مباشرة في الحوار الخاص بك أو النشاط.

وأردت أيضا أن الجمع بين منتقي التاريخ وTimePicker. لذلك أنا خلق API للتعامل مع كل من واجهة واحدة! :)

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

ويمكنك أيضا استخدام SublimePicker

وكنت تواجه نفس المشكلة في أحد مشاريعي ولقد قررت أن تجعل القطعة مخصص يحتوي كل من التاريخ ومنتقي الوقت في الحوار صديقة للمستخدم واحد. يمكنك الحصول على شفرة المصدر جنبا إلى جنب مع مثال على http://code.google.com/p/datetimepicker / . مرخص رمز تحت أباتشي 2.0.

وأنا متشعب، وتحديثها، ريفاكتوريد وmavenized على الروبوت-dateslider المشروع. وعلى جيثب الآن:

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

قد يكون هذا البرنامج التعليمي سوف صلة مساعدة HTTP: // custom-android-dn.blogspot.com/2013/03/how-to-create-custom-date-time-picker.html

يمكنك استخدام واحدة من DatePicker library wdullaer/MaterialDateTimePicker

  • أول عرض منتقي التاريخ.

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

وثمة خيار آخر هو المشروع الروبوت عجلة الذي يأتي جميلة قريبة من وUIDatePicker الحوار من دائرة الرقابة الداخلية.

وويوفر التمرير العمودي لاختيار أي شيء (بما في ذلك التاريخ والوقت). إذا كنت تفضل التمرير الأفقي، وDateSlider المشار إليه بواسطة ربيع هو أفضل.

ولقد خلق الحوار التنبيه التي تجمع بين منتقي التاريخ والوقت منتقي. يمكنك الحصول على التعليمات البرمجية في https://github.com/nguyentoantuit/android ملاحظة: الخاص DateTimePicker هي مكتبة

وهنا هو نسخة أكثر إحكاما من فكرة Jaydeep ليظهر الحوار واحدا تلو الآخر. I مثل هذا الحل لأنه لا يوجد لديه تبعيات.

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

ولقد كتبت ما يصل قليلا القطعة التي تسمح لك لاختيار كل من التاريخ والوقت.

DateTimeWidget

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top