同一个DialogFragment中的时间和日期选择器

时间:2015-02-04 19:17:40

标签: java android picker

我环顾四周,但我找不到制作时间和日期选择器的好方法,如下图所示。我猜时间选择器只是两个NumberPicker,但我不知道在哪里找到左边的 [日,日月]。

带字符串的NumberPicker是一个选项,但是创建带有日期的字符串。有更简单/更好的方法吗?

What I am looking for

2 个答案:

答案 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。如果有人有同样的问题,这是我的解决方案。设计不是最终的,但它接近我想要的。

enter image description here

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