我试图在TimePicker
中设置小时和分钟,我发现似乎NumberPicker
中所需的项目数量最少,以便包围值。
如果我没有这么多的值(只得到4:“00”,“15”,“30”和“45”),如何将项目数设置为小于默认值?
下图显示小时数正确但分钟错误。我需要会议记录(比如“00”之前的“45”),就像小时一样。
这是我的代码:
@SuppressLint("NewApi")
private void setTimePickerInterval(TimePicker timePicker) {
try {
Class<?> classForid = Class.forName("com.android.internal.R$id");
Field fieldHr = classForid.getField("hour");
mHourPicker = (NumberPicker) timePicker.findViewById(fieldHr.getInt(null));
//set hours from 9am to 7pm (opening hours)
mHourPicker.setMinValue(0);
mHourPicker.setMaxValue(10);
mDisplayedValuesHr = new ArrayList<String>();
for (int i = 9; i < 20; i++) {
mDisplayedValuesHr.add(String.format("%02d", i));
}
mHourPicker.setDisplayedValues(mDisplayedValuesHr.toArray(new String[0]));
Field fieldMin = classForid.getField("minute");
mMinutePicker = (NumberPicker) timePicker.findViewById(fieldMin.getInt(null));
//set minutes in 15 mins interval
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(3);
mDisplayedValuesMin = new ArrayList<String>();
for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
mDisplayedValuesMin.add(String.format("%02d", i));
}
mMinutePicker.setDisplayedValues(mDisplayedValuesMin.toArray(new String[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
由于
答案 0 :(得分:2)
您可以明确调用setWrapSelectorWheel (boolean)来触发updateWrapSelectorWheel
的私有方法NumberPicker
:
@SuppressLint("NewApi")
private void setTimePickerInterval(TimePicker timePicker) {
try {
Class<?> classForid = Class.forName("com.android.internal.R$id");
Field fieldHr = classForid.getField("hour");
mHourPicker = (NumberPicker) timePicker.findViewById(fieldHr.getInt(null));
//set hours from 9am to 7pm (opening hours)
mHourPicker.setMinValue(0);
mHourPicker.setMaxValue(10);
mDisplayedValuesHr = new ArrayList<String>();
for (int i = 9; i < 20; i++) {
mDisplayedValuesHr.add(String.format("%02d", i));
}
mHourPicker.setDisplayedValues(mDisplayedValuesHr.toArray(new String[0]));
Field fieldMin = classForid.getField("minute");
mMinutePicker = (NumberPicker) timePicker.findViewById(fieldMin.getInt(null));
//set minutes in 15 mins interval
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(3);
mDisplayedValuesMin = new ArrayList<String>();
for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
mDisplayedValuesMin.add(String.format("%02d", i));
}
mMinutePicker.setDisplayedValues(mDisplayedValuesMin.toArray(new String[0]));
mMinutePicker.setWrapSelectorWheel(true);
} catch (Exception e) {
e.printStackTrace();
}
}