Android日期/时间轮选择器
如何为时间选择器(以及日期选择器)实现此布局?默认布局是(非常大的)时钟或(不漂亮的)微调器样式的时间选择器。我在几个应用程序中看到了这一点,但找不到如何实现这种外观和感觉Android日期/时间轮选择器,android,datepicker,datetimepicker,timepicker,Android,Datepicker,Datetimepicker,Timepicker,如何为时间选择器(以及日期选择器)实现此布局?默认布局是(非常大的)时钟或(不漂亮的)微调器样式的时间选择器。我在几个应用程序中看到了这一点,但找不到如何实现这种外观和感觉 此示例有三个选择器:NumberPicker、DatePicker和TimerPicker 或 仅使用不带库的示例,并覆盖Android默认选择器。您应该注意,此对话框是一个片段 也就是说,主要思想是: 当您需要启动此日期选择器时,您将显示该片段作为当前活动的覆盖。此片段有一个日期选取侦听器:当用户选取日期时启动的事件。好
此示例有三个选择器:NumberPicker、DatePicker和TimerPicker 或
仅使用不带库的示例,并覆盖Android默认选择器。您应该注意,此对话框是一个片段 也就是说,主要思想是: 当您需要启动此日期选择器时,您将显示该片段作为当前活动的覆盖。此片段有一个日期选取侦听器:当用户选取日期时启动的事件。好的,在这里之前一切都很简单。最难理解的是最后一件事:片段和活动之间的交互。为何因为活动需要知道选择了哪个日期。为了实现这一点,片段将有一个公共接口,该接口将由活动实现 好的,让我们看看代码: 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);
}
}
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);
}
}
DatePickerFragment.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);
}
}
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);
}
}
对于可能需要此功能的任何人的未来参考,只需在android小部件中选择一个时间选择器,然后在xml文件中键入
android:timePickerMode=“spinner”
即可实现此时间选择器微调器
您的小部件xml代码应该如下所示:
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner" />
我的答案是基于。简单地添加xml格式的timepickermode,如下所示
在我看来,实现这一点的最简单方法是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>
你得到这个:
你可以在android中查看时间选择器,这里有一些链接,只需查看即可显示我想要的时间选择器布局,但它似乎是默认的时间选择器,尽管我在预览中没有看到它(使用最新的api 22)。我认为它是一个带有上下按钮的旋转器。谢谢。你所说的“只使用样本而不使用库并覆盖Android默认选择器”是什么意思?你的好消息。在这个示例中,有一个示例使用了一个库,该库覆盖了Android默认选择器,您可以更改颜色,但如果您只想使用具有默认颜色的选择器,请仅查看app文件夹中的示例,并将“net.simonvt.timepicker.timepicker”覆盖为“timepicker”。据我所知,我需要net.simonvt.datepicker.datepicker(例如)实现,以便查看我想要的外观,在哪里可以找到它以便在代码中使用它?在链接中,我只看到了对它的引用,但没有看到实际的实现,我遗漏了什么?它们在示例中“app”文件夹旁边,有文件夹“numberpicker library”、“datepicker libray”和“timerpicker library”.所以我需要从这里获取来源:然后我就可以在我的应用程序的布局中使用它们了?我不确定我是否理解你的回答。我希望将时间/日期选择器组件与其他组件一起放置在片段上,用户可以在其中选择日期/时间。我的问题是关于时间选择器组件的布局。只需使用DatePickerFragment类并跳过接口,它就不能与其他对象/组件/视图一起用作布局中的简单对象/组件/视图?例如:同一版面内的日期选择器、文本视图和按钮?当然可以。但它不是一个简单的组件。这是一个片段组件