Android TimePickerDialog 设置时间问题(Lollipop 5.0.1 on Samsung Note4)
Android TimePickerDialog set time issue (Lollipop 5.0.1 on Samsung Note4)
我有一个奇怪的行为。我创建了一个自定义 TimePickerDialog
来处理自定义分钟间隔(5、10、15)以显示在分钟微调器上。
现在的问题是,在装有 Lollipop 5.0.1 的 Note 4 上,我遇到了一个奇怪的问题:
如果我尝试用键盘设置时间,分钟微调器上的数字就会消失,我无法输入任何值;在小时微调器上没有问题。
在 logcat 上,当我点击分钟微调器时,我收到了这两个警告(可能相关):
09-15 10:18:26.790: W/IInputConnectionWrapper(19382): getTextBeforeCursor on inactive InputConnection
09-15 10:18:26.790: W/IInputConnectionWrapper(19382): getCursorCapsMode on inactive InputConnection
这是自定义 TimePickerDialog.onAttachedToWindow()
方法的代码:
@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_interval) - 1);
// List<String> displayedValues = new ArrayList<String>();
for (int i = 0; i < 60; i += time_interval) {
displayedValues.add(String.format("%02d", i));
}
mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0]));
Field numberpickerField = classForid.getField("numberpicker_input");
EditText mInputText = (EditText) mMinuteSpinner.findViewById(numberpickerField.getInt(null));
mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
} catch (Exception e) {
e.printStackTrace();
}
}
已解决。
在 Android 5.0.1 上,至少在三星 Note4 上,在我的例子中,传递给 timePicker 的值有问题。
mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0]));
传递给 setDisplayValues()
的值需要是普通数字 {"0","1","2","3"..}
而不是 2 位数字 {"00", "01", "02"..}
才能正常工作。
只为多笑一点...
Lollipop 5.1.1,再次在 Note4 上测试,没有这种奇怪的行为
希望对某人有用。
干杯
我有一个奇怪的行为。我创建了一个自定义 TimePickerDialog
来处理自定义分钟间隔(5、10、15)以显示在分钟微调器上。
现在的问题是,在装有 Lollipop 5.0.1 的 Note 4 上,我遇到了一个奇怪的问题: 如果我尝试用键盘设置时间,分钟微调器上的数字就会消失,我无法输入任何值;在小时微调器上没有问题。
在 logcat 上,当我点击分钟微调器时,我收到了这两个警告(可能相关):
09-15 10:18:26.790: W/IInputConnectionWrapper(19382): getTextBeforeCursor on inactive InputConnection
09-15 10:18:26.790: W/IInputConnectionWrapper(19382): getCursorCapsMode on inactive InputConnection
这是自定义 TimePickerDialog.onAttachedToWindow()
方法的代码:
@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_interval) - 1);
// List<String> displayedValues = new ArrayList<String>();
for (int i = 0; i < 60; i += time_interval) {
displayedValues.add(String.format("%02d", i));
}
mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0]));
Field numberpickerField = classForid.getField("numberpicker_input");
EditText mInputText = (EditText) mMinuteSpinner.findViewById(numberpickerField.getInt(null));
mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
} catch (Exception e) {
e.printStackTrace();
}
}
已解决。
在 Android 5.0.1 上,至少在三星 Note4 上,在我的例子中,传递给 timePicker 的值有问题。
mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0]));
传递给 setDisplayValues()
的值需要是普通数字 {"0","1","2","3"..}
而不是 2 位数字 {"00", "01", "02"..}
才能正常工作。
只为多笑一点...
Lollipop 5.1.1,再次在 Note4 上测试,没有这种奇怪的行为
希望对某人有用。 干杯