android - 间隔 15 分钟的时间选择器

标签 android layout custom-controls timepicker

我有一个带有时间选择器和日期选择器的自定义对话框。我想将时间选择器的分钟微调器集合设置为 [0, 15, 30, 45],即 15 分钟间隔。

现在我看到了几种解决方案,但似乎都没有涵盖 UI 会将下一分钟和前一分钟显示为所选分钟的 -1 和 +1 分钟,例如向用户显示 29、30、31。

此外,我不清楚如何将自定义时间选择器附加到 Activity - 我不需要 customerTimePicker xml 组件来执行此操作吗?

简而言之 - 我是调整 native 时间选择器还是需要构建自定义 xml 和类?

我目前拥有的 布局:

<TimePicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/timePicker_fixture"
    android:layout_weight="1" />

Activity

TimePicker timePicker_fixture = (TimePicker) dialog.findViewById(R.id.timePicker_fixture);
timePicker_fixture.setIs24HourView(true);

建议的自定义类(我如何使用它 - 我的布局中是否需要自定义 xml 组件?)

public class CustomTimePickerDialog extends TimePickerDialog {

    private final static int TIME_PICKER_INTERVAL = 15;
    private TimePicker timePicker;
    private final OnTimeSetListener callback;

    public CustomTimePickerDialog(Context context, OnTimeSetListener callBack,
                                  int hourOfDay, int minute, boolean is24HourView) {
        super(context, TimePickerDialog.THEME_HOLO_LIGHT, callBack, hourOfDay, minute / TIME_PICKER_INTERVAL,
                is24HourView);
        this.callback = callBack;
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        if (callback != null && timePicker != null) {
            timePicker.clearFocus();
            callback.onTimeSet(timePicker, timePicker.getCurrentHour(),
                    timePicker.getCurrentMinute() * TIME_PICKER_INTERVAL);
        }
    }

    @Override
    protected void onStop() {
    }

    @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_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]));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

最佳答案

添加了以下内容

   @SuppressLint("NewApi")
    private void setTimePickerInterval(TimePicker timePicker) {
        try {
            Class<?> classForid = Class.forName("com.android.internal.R$id");
            // Field timePickerField = classForid.getField("timePicker");

            Field field = classForid.getField("minute");
            minutePicker = (NumberPicker) timePicker
                    .findViewById(field.getInt(null));

            minutePicker.setMinValue(0);
            minutePicker.setMaxValue(7);
            displayedValues = new ArrayList<String>();
            for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
                displayedValues.add(String.format("%02d", i));
            }
            for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
                displayedValues.add(String.format("%02d", i));
            }
            minutePicker.setDisplayedValues(displayedValues
                    .toArray(new String[0]));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在我的 Activity 中,然后从 oncreate() 调用此方法。当然,您可以在任何需要的地方调用它。

关于android - 间隔 15 分钟的时间选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32397884/

相关文章:

layout - 如何像 Pinterest 上那样布局照片

python - Pyqt 在 Widget 中嵌入图形对象

java - 无法显示安卓对话框

asp.net - 用户控件、服务器控件和自定义控件之间有什么区别?

c# - 无法解释的变量增加

使用 PowerMock 进行 Android 仪器测试

java - Java、Android 上的 ImageView 重力问题

Android:如何将自定义元素放在圆圈/目标上

php - 具有多个用户位置的 Google map Android 应用

android - 应用程序之间的 Firebase 身份验证状态共享