gpt4 book ai didi

android - 如何实现android分秒选择器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:51 30 4
gpt4 key购买 nike

我需要实现一个对话框,用户可以在其中输入以分和秒为单位的时间。例如:6 分 30 秒。在那里我还需要分钟数的上限(即分钟范围为 0-10,秒范围为 0-60。)

但正如此处讨论的那样,android TimePicker 仅显示小时和分钟。我看过一些关于向其添加秒数的帖子,但没有看到关于删除小时数和添加秒数的帖子。可能也没有办法对 session 记录施加限制。

我看过几篇推荐使用 NumberPicker 创建自定义时间选择器的帖子,但也看到一些警告,指出 NumberPicker 仅供内部使用,不应使用。这看起来像是第二十二条军规。

我可以尝试修改 TimePicker 或 NumberPicker 的源代码,但我对理解它们的工作原理和维护一个自定义版本所花费的时间并不狂热。

我想这让我只能实现一个自定义的分钟-秒选择器。使用上下按钮移动数字看起来并不难,但我不知道如何让用户滑动以滚动浏览每个“轮子”中的数字。

有什么建议吗?

最佳答案

使用后this SO answer为了向 TimePickerDialog 添加分钟间隔,我制作了一个类似的子类,将小时微调器的范围扩展到 0-60,并将小时:分钟微调器视为分钟:秒:

import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.NumberPicker;
import android.widget.TimePicker;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class DurationPicker extends TimePickerDialog {

private TimePicker timePicker;
private final OnTimeSetListener callback;

private int initialMinutes;

public DurationPicker(Context context, OnTimeSetListener callBack, int minutes, int seconds) {
super(context, callBack, minutes, seconds, true); // the last argument removes the am/pm spinner
this.callback = callBack;
this.initialMinutes = minutes; // we'll have to set this again after modifying the "hours" spinner
this.setTitle("Set duration");
}

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

@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("hour");

// modify the hours spinner to cover the maximum number of minutes we want to support
int maxMinutes = 60;
NumberPicker mHourSpinner = (NumberPicker)timePicker.findViewById(field.getInt(null));
mHourSpinner.setMinValue(0);
mHourSpinner.setMaxValue(maxMinutes);
List<String> displayedValues = new ArrayList<String>();
for (int i = 0; i <= maxMinutes; i++) {
displayedValues.add(String.format("%d", i));
}
mHourSpinner.setDisplayedValues(displayedValues.toArray(new String[0]));
mHourSpinner.setValue(initialMinutes); // we can set this again now that we've modified the hours spinner
} catch (Exception e) {
e.printStackTrace();
}

}

}

在回调中,只需将第二个参数的值视为分钟,将第三个参数的值视为秒。

当“分钟”微调器设置为大于 24 的数字时, future 版本的 Android 可能会返回不正确的结果,但我通读了当前的 TimePicker 代码并没有发现任何问题。此外,还可以修改 am/pm 微调器或将其替换为秒微调器,然后选择器可以支持小时:分钟:秒以及分钟:秒。

关于android - 如何实现android分秒选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529500/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com