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