我环顾四周,但我找不到制作时间和日期选择器的好方法,如下图所示。我猜时间选择器只是两个NumberPicker,但我不知道在哪里找到左边的 [日,日月]。
带字符串的NumberPicker是一个选项,但是创建带有日期的字符串。有更简单/更好的方法吗?
答案 0 :(得分:0)
美丽的日期时间选择器:
如果您想要自定义日期时间选择器:
在这里,我可以帮助您解决一些问题:您可以在LinearLayout中创建一个由DatePicker和TimePicker组成的布局,其方向设置为垂直。
<强> custom_dialog.xml:强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<DatePicker
android:id="@+id/datePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</DatePicker>
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TimePicker>
</LinearLayout>
然后使用此布局创建对话框。
Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");
要对与TimePicker交互的用户做出反应,请执行以下操作:
TimePicker tp = (TimePicker)dialog.findViewById(R.id.timepicker1);
tp.setOnTimeChangedListener(myOnTimechangedListener);
要在用户完成设置后从Date-和TimePicker获取值,请在对话框中添加“确定”按钮,然后在用户按“确定”时从Date-和TimePicker中读取日期和时间值。 / p>
答案 1 :(得分:0)
我解决了&#34;艰难的方式&#34;有3个NumberPickers。如果有人有同样的问题,这是我的解决方案。设计不是最终的,但它接近我想要的。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dates = getDatesFromCalender();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialogfragment_time_date_picker, container);
datePicker = (NumberPicker) view.findViewById(R.id.datePicker);
hourPicker = (NumberPicker) view.findViewById(R.id.hourPicker);
minutePicker = (NumberPicker) view.findViewById(R.id.minutePicker);
doneButton = (Button) view.findViewById(R.id.doneButton);
currentTimeButton = (Button) view.findViewById(R.id.currentTimeButton);
datePicker.setMinValue(0);
datePicker.setMaxValue(dates.length - 1);
datePicker.setFormatter(new NumberPicker.Formatter() {
@Override
public String format(int value) {
return dates[value];
}
});
datePicker.setDisplayedValues(dates);
hourPicker.setMinValue(0);
hourPicker.setMaxValue(23);
hourPicker.setValue(rightNow.get(Calendar.HOUR_OF_DAY));
minutePicker.setMinValue(0);
minutePicker.setMaxValue(59);
minutePicker.setValue(rightNow.get(Calendar.MINUTE));
doneButton.setOnClickListener(this);
currentTimeButton.setOnClickListener(this);
getDialog().setTitle(R.string.choose_time);
return view;
}
private String[] getDatesFromCalender() {
Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"));
List<String> dates = new ArrayList<String>();
DateFormat dateFormat = new SimpleDateFormat("EE, dd MMM", new Locale("sv", "SE"));
dates.add(dateFormat.format(c1.getTime()));
for (int i = 0; i < 60; i++) {
c1.add(Calendar.DATE, 1);
dates.add(dateFormat.format(c1.getTime()));
}
c2.add(Calendar.DATE, -60);
for (int i = 0; i < 60; i++) {
c2.add(Calendar.DATE, 1);
dates.add(dateFormat.format(c2.getTime()));
}
return dates.toArray(new String[dates.size() - 1]);
}
@Override
public void onClick(View v) {
Bundle args = new Bundle();
if (v.getId() == R.id.doneButton) {
//Handle selected time and date
} else if (v.getId() == R.id.currentTimeButton) {
}
}
和XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="match_parent"
>
<LinearLayout android:layout_weight="0.3" android:layout_height="fill_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<NumberPicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/datePicker"/>
<NumberPicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/hourPicker"/>
<NumberPicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/minutePicker"/>
</LinearLayout>
</LinearLayout>
<LinearLayout android:layout_weight="1" android:layout_height="fill_parent" android:layout_width="match_parent"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/currentTime"
android:id="@+id/currentTimeButton"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/done"
android:id="@+id/doneButton"/>
</LinearLayout>
</LinearLayout>