【问题标题】:Android TimePickerDialog set time issue (Lollipop 5.0.1 on Samsung Note4)Android TimePickerDialog 设置时间问题(Samsung Note4 上的 Lollipop 5.0.1)
【发布时间】:2015-09-15 08:26:14
【问题描述】:

我的行为很奇怪。我创建了一个自定义 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 android-5.0-lollipop samsung-mobile android-timepicker


    【解决方案1】:

    解决了。

    在 Android 5.0.1 上,至少在三星 Note4 上,在我的情况下,传递给 timePicker 的值存在问题。

    mMinuteSpinner.setDisplayedValues(displayedValues.toArray(new String[0]));
    

    传递给setDisplayValues() 的值需要是普通数字{"0","1","2","3"..} 而不是两位数字{"00", "01", "02"..} 才能正常工作。

    只是为了多笑一点......

    Lollipop 5.1.1,在 Note4 上再次测试,没有这种奇怪的行为

    希望对某人有用。 干杯

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      相关资源
      最近更新 更多