【发布时间】:2015-09-04 12:18:00
【问题描述】:
我有一个带有时间选择器和日期选择器的自定义对话框。我想将 timepicker 的分钟微调器集合设置为 [0, 15, 30, 45] 即 15 分钟间隔。
现在我看到了几种解决方案,但似乎都没有涵盖这样一个事实,即 UI 会将下一分钟和前一分钟显示为所选分钟的 -1 和 +1 分钟,例如向用户显示 29、30、31。
另外,我不清楚如何将自定义时间选择器附加到活动 - 我不需要 customerTimePicker xml 组件来执行此操作吗?
简而言之——我是调整本机时间选择器还是需要构建自定义 xml 和类?
我目前拥有的 布局:
<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker_fixture"
android:layout_weight="1" />
活动
TimePicker timePicker_fixture = (TimePicker) dialog.findViewById(R.id.timePicker_fixture);
timePicker_fixture.setIs24HourView(true);
建议的自定义类(我如何使用它 - 我的布局中是否需要自定义 xml 组件?)
public class CustomTimePickerDialog extends TimePickerDialog {
private final static int TIME_PICKER_INTERVAL = 15;
private TimePicker timePicker;
private final OnTimeSetListener callback;
public CustomTimePickerDialog(Context context, OnTimeSetListener callBack,
int hourOfDay, int minute, boolean is24HourView) {
super(context, TimePickerDialog.THEME_HOLO_LIGHT, callBack, hourOfDay, minute / TIME_PICKER_INTERVAL,
is24HourView);
this.callback = callBack;
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (callback != null && timePicker != null) {
timePicker.clearFocus();
callback.onTimeSet(timePicker, timePicker.getCurrentHour(),
timePicker.getCurrentMinute() * TIME_PICKER_INTERVAL);
}
}
@Override
protected void onStop() {
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
try {
Class<?> classForid = Class.forName("com.android.internal.R$id");
Field timePickerField = classForid.getField("timePicker");
this.timePicker = (TimePicker) findViewById(timePickerField
.getInt(null));
Field field = classForid.getField("minute");
NumberPicker mMinuteSpinner = (NumberPicker) timePicker
.findViewById(field.getInt(null));
mMinuteSpinner.setMinValue(0);
mMinuteSpinner.setMaxValue((60 / TIME_PICKER_INTERVAL) - 1);
List<String> displayedValues = new ArrayList<String>();
for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
displayedValues.add(String.format("%02d", i));
}
mMinuteSpinner.setDisplayedValues(displayedValues
.toArray(new String[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
你看过这里 - stackoverflow.com/questions/2580216/… 吗?
-
好吧,这行得通:) 它有点....凌乱?我打算使用它,但我不明白 suppressLint("NewApi")
-
只要去掉这个注解,你就会看到有错误的行(如果你的项目 api 级别低于“NewApi”)
标签: android layout custom-controls timepicker