Java Android NumberPicker设置包裹项目的项目数

Java Android NumberPicker设置包裹项目的项目数,java,android,timepicker,numberpicker,Java,Android,Timepicker,Numberpicker,我试图在TimePicker中设置小时和分钟,我发现NumberPicker中似乎有一个最小的项目数,需要对值进行包装 如果没有这么多的值(只有4个:“00”、“15”、“30”和“45”),如何将项目数设置为小于默认值 下图显示小时是正确的,但分钟是错误的。我需要像小时一样的分钟数(即“00”之前的“45”) 这是我的密码: @SuppressLint("NewApi") private void setTimePickerInterval(TimePicker timePicker) {

我试图在
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();
    }
}
@SuppressLint(“NewApi”)
私有void setTimePickerInterval(TimePicker TimePicker){
试一试{
Class classForid=Class.forName(“com.android.internal.R$id”);
fieldHr=classForid.getField(“小时”);
mHourPicker=(NumberPicker)timePicker.findviewbyd(fieldHr.getInt(null));
//上午9点至晚上7点(开放时间)
mHourPicker.setMinValue(0);
mHourPicker.setMaxValue(10);
mDisplayedValuesHr=新的ArrayList();
对于(int i=9;i<20;i++){
mDisplayedValuesHr.add(String.format(“%02d”,i));
}
mHourPicker.setDisplayedValues(mDisplayedValuesHr.toArray(新字符串[0]);
fieldMin=classForid.getField(“分钟”);
mMinutePicker=(NumberPicker)timePicker.findViewById(fieldMin.getInt(null));
//以15分钟为间隔设置分钟
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(3);
mDisplayedValuesMin=新的ArrayList();
对于(int i=0;i<60;i+=时间\u选择器\u间隔){
mDisplayedValuesMin.add(String.format(“%02d”,i));
}
mMinutePicker.setDisplayedValues(mDisplayedValuesMin.toArray(新字符串[0]);
}捕获(例外e){
e、 printStackTrace();
}
}
您可以显式调用以触发
NumberPicker
的私有方法updateWrapSelectorWheel:

@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();
    }
}
@SuppressLint(“NewApi”)
私有void setTimePickerInterval(TimePicker TimePicker){
试一试{
Class classForid=Class.forName(“com.android.internal.R$id”);
fieldHr=classForid.getField(“小时”);
mHourPicker=(NumberPicker)timePicker.findviewbyd(fieldHr.getInt(null));
//上午9点至晚上7点(开放时间)
mHourPicker.setMinValue(0);
mHourPicker.setMaxValue(10);
mDisplayedValuesHr=新的ArrayList();
对于(int i=9;i<20;i++){
mDisplayedValuesHr.add(String.format(“%02d”,i));
}
mHourPicker.setDisplayedValues(mDisplayedValuesHr.toArray(新字符串[0]);
fieldMin=classForid.getField(“分钟”);
mMinutePicker=(NumberPicker)timePicker.findViewById(fieldMin.getInt(null));
//以15分钟为间隔设置分钟
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(3);
mDisplayedValuesMin=新的ArrayList();
对于(int i=0;i<60;i+=时间\u选择器\u间隔){
mDisplayedValuesMin.add(String.format(“%02d”,i));
}
mMinutePicker.setDisplayedValues(mDisplayedValuesMin.toArray(新字符串[0]);
mNutEpicker.setWrapSelectorWheel(真);
}捕获(例外e){
e、 printStackTrace();
}
}

请注意,这段代码将遇到实际值与显示值之间的问题。有关后续信息,请参阅