我正在 android 中的 DatePicker 和 TimePicker 工作。我正在从服务器获取开始时间和时间。我可以使用以下方式以编程方式设置最大日期和最小日期这个链接 https://stackoverflow.com/questions/6421874/how-to-get-the-date-set-in-the-datepicker-widget-in-android/7961268#7961268
我想在时间选择器中设置最短时间(07:00)和最长时间(10:00)并保持30分钟的间隔。我尝试使用这个链接 https://stackoverflow.com/questions/2580216/android-timepicker-minutes-to-15
我需要的是设置时间选择,最短时间为 07:00,最长时间为 10:00 和时间间隔
07:00,07:30, 08:00 等
这是相同的代码`
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TimePicker pn = (TimePicker) findViewById(R.id.tp_powernap);
pn.setCurrentHour(7);
pn.setCurrentMinute(0);
System.out.println("timepicker erstellt");
pn.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
System.out.println("Tastatur geblockt");
pn.setOnTimeChangedListener(StartTimeChangedListener);
System.out.println("starttimechangedlistener");
pn.setIs24HourView(false);
}
private TimePicker.OnTimeChangedListener StartTimeChangedListener =
new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
updateDisplay(view, hourOfDay, minute);
}
};
private TimePicker.OnTimeChangedListener NullTimeChangedListener =
new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
}
};
private void updateDisplay(TimePicker timePicker, int hourOfDay, int minute) {
int nextMinute = 0;
timePicker.setOnTimeChangedListener(NullTimeChangedListener);
if (minute >= 45 && minute <= 59)
nextMinute = 45;
else if (minute >= 30)
nextMinute = 30;
else if (minute >= 15)
nextMinute = 15;
else if (minute > 0)
nextMinute = 0;
else {
nextMinute = 45;
}
if (minute - nextMinute == 1) {
if (minute >= 45 && minute <= 59)
nextMinute = 00;
else if(minute >= 30)
nextMinute = 45;
else if(minute >= 15)
nextMinute = 30;
else if(minute > 0)
nextMinute = 15;
else {
nextMinute = 15;
}
}
timePicker.setCurrentMinute(nextMinute);
timePicker.setOnTimeChangedListener(StartTimeChangedListener);
}
仅供参考(这是一个老问题)。可以使用以下 hack 来实现间隔:
Class<?> classForid = Class.forName("com.android.internal.R$id");
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]));
也可以看看here https://stackoverflow.com/questions/2580216/android-timepicker-minutes-to-15
开始时间和结束时间可以以类似的方式设置,但 AM/PM 标志存在问题。如果您不使用 am/pm 而是始终以 24 小时格式显示时间,您的问题就解决了;-)
if (startHour != -1 && endHour != -1) {
Field field = classForid.getField("hour");
NumberPicker hourSpinner = (NumberPicker) timePicker
.findViewById(field.getInt(null));
hourSpinner.setMinValue(startHour);
hourSpinner.setMaxValue(endHour);
List<String> displayedValues = new ArrayList<String>();
if (timePicker.is24HourView()) {
for (int i = startHour; i <= endHour; ++i) {
displayedValues.add(String.format("%02d", i));
}
} else {
for (int i = startHour; i <= 12; ++i) {
displayedValues.add(String.format("%d", i));
}
for (int i = 1; i <= endHour % 12; ++i) {
displayedValues.add(String.format("%d", i));
}
}
hourSpinner.setDisplayedValues(displayedValues
.toArray(new String[0]));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)