在android应用程序中的DateTimeselect器
有没有任何Android的小部件,可以同时selectdate和时间? 我已经使用基本的时间select器和dateselect器 。
但他们不是性感和用户友好(我发现)。 你知道包含date和时间的小部件是否存在? 谢谢,Luc
Android中没有提供这个function。
将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();
使用这个function可以让你逐一拍摄date和时间,然后将其设置为全局variablesdate。 没有图书馆没有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(); }
我创build了一个库来做到这一点。 它也有可定制的颜色!
这是非常简单的使用。
首先你创build一个监听器:
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. } };
然后你创build并显示对话框:
new SlideDateTimePicker.Builder(getSupportFragmentManager()) .listener(listener) .initialDate(new Date()) .build() .show();
希望对你有帮助。
在DatePicker
更新时间方法中调用时间select器对话框。 它不会被同时调用,但是当您按下DatePicker
设置button时。 时间select器对话框将打开。 该方法如下。
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显示如何popup一个带时间select器的对话框和另一个带有dateselect器的对话框。 但是,您需要知道,您可以直接在自己的布局中使用这些UI小部件。 您可以构build自己的对话框,在同一视图中同时包含TimePicker和DatePicker,从而完成我认为正在寻找的内容。
换句话说,不是使用TimePickerDialog和DatePickerDialog,而是直接在您自己的对话框或活动中使用UI小部件TimePicker和DatePicker 。
我在我的一个项目中遇到了同样的问题,并决定在一个用户友好的对话框中创build一个自定义小部件,其中包含date和时间select器。 您可以通过http://code.google.com/p/datetimepicker/获取源代码以及示例。; 该代码是在Apache 2.0下授权的。
我分叉,更新,重构和maven化的android-dateslider项目。 现在在Github上:
我也想结合一个DatePicker和一个TimePicker。 所以我创build了一个API来处理两个界面! 🙂
https://github.com/Kunzisoft/Android-SwitchDateTimePicker
你也可以使用SublimePicker
可能是这个教程链接将帮助http://custom-android-dn.blogspot.com/2013/03/how-to-create-custom-date-time-picker.html
您可以使用DatePicker library
wdullaer / MaterialDateTimePicker之一
-
首先显示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); }
另一种select是与iOS的UIDatePicker对话框非常接近的android-wheel项目。
它提供了一个垂直滑块来select任何东西(包括date和时间)。 如果你喜欢水平滑块,Rabi引用的DateSlider更好。
我已经创build了一个组合dateselect器和时间select器的提醒对话框。 您可以在https://github.com/nguyentoantuit/android获取代码注意:DateTimePicker是一个库;
这里是Jaydeep关于一个接一个地显示一个对话框的更简洁的版本。 我喜欢这个解决scheme,因为它没有依赖关系。
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();