Android日期/时间轮选择器

时间:2015-04-06 11:58:24

标签: android datepicker datetimepicker timepicker

如何为时间选择器(以及日期选择器)实现此布局?默认布局是(非常大)时钟或(非美)微调器时间选择器。我在几个应用程序中看到了这个,但无法找到如何实现这种外观和感觉。

enter image description here

5 个答案:

答案 0 :(得分:5)

对于可能需要此功能的任何人的未来参考,可以通过在android小部件中选择TimePicker然后在xml文件中键入android:timePickerMode="spinner"来实现此时间选择器微调器。

您的小部件xml代码应如下所示:

<TimePicker
    android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:timePickerMode="spinner" />

我的回答是基于documentation

答案 1 :(得分:1)

此示例有三个选择器:NumberPicker,DatePicker和TimerPicker。

https://github.com/rodrigobusata/android-pickers

仅使用没有库的示例并覆盖Android默认选择器。

答案 2 :(得分:0)

您应该注意,此对话框是片段。

那说,主要的想法是这样的: 当您需要启动此日期选择器时,您将显示该片段作为当前活动的叠加。此片段具有日期选择侦听器:用户选择日期时启动的事件。好的,到此为止一切都很简单。最难理解的是最后一个:片段和活动之间的交互。做什么的?因为活动需要知道选择了日期。为实现这一目标,Fragment将拥有一个将由活动实现的公共接口。

好的,让我们看看代码:

<强> MyActivity.java

public class MyActivity extends FragmentActivity implements DatePickerFragment.FragmentInteraction{

    @Override
    public void onCreate(Bundle savedInstanceState){
        Button showDatePickerButton = (Button)findViewById(R.id.dateButton);
        showDatePickerButtonsetOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(getSupportFragmentManager(), getString(R.string.datePickerTitle));
            }
        });
    }

    @Override
    public void doSomethingWithDate(int day, int month, int year) {
        Log.d("", "SELECTED DATE " + month + "/" + day  + "/" + year);
    }
}

<强> DatePickerFragment.java

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    private FragmentInteraction mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mListener = (FragmentInteraction) activity;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //Show picker with actual date presetted
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int anio, int mes, int dia) {
        mListener.doSomethingWithDate(dia, mes + 1, anio);
    }

    public interface FragmentInteraction{
        public void doSomethingWithDate(int dia, int mes, int anio);
    }
}

答案 3 :(得分:0)

像这样简单地在xml中添加timepickermode          <TimePicker android:id="@+id/time" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:gravity="center" android:timePickerMode="spinner" android:text="TimePicker" android:textSize="18sp" android:textColor="@android:color/black" android:textStyle="bold"/>

答案 4 :(得分:0)

在我看来,实现此目标的最简单方法是自api级别21开始:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="8dp">

    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner" />

    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:calendarViewShown="false"
        android:datePickerMode="spinner" />

</LinearLayout>

您得到了:

Date Time Picker Example