我用的是时间选择器旋转器。我想实施30分钟的间隔。
我使用的代码输出这个效果,如下图所示。
代码如下:
picker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hour, int min) {
timeoutput.setText(String.format("%02dh%02d", hour, min));
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Schedule.this, choosewalk.class);
startActivity(intent);
}
});
@SuppressLint("DefaultLocale")
private void TimeInterval(TimePicker picker) {
try {
int Interval = 30;
NumberPicker minute = (NumberPicker) picker.findViewById(Resources.getSystem().getIdentifier(
"minute", "id", "android"));
minute.setMinValue(0);
minute.setMaxValue((60 / Interval) - 1);
List<String> displayedValue = new ArrayList<String>();
for (int i = 0; i < 60; i += Interval) {
displayedValue.add(String.format("%02d", i));
}
minute.setDisplayedValues(displayedValue.toArray(new String[0]));
} catch (Exception e) {
e.printStackTrace();
}
}
我知道也有类似的问题,但对于这个具体的问题,我很挣扎。我知道这个方法适用于5、10、15等时间间隔。它在30分钟的时间间隔内修改代码是有问题的。
1条答案
按热度按时间ecr0jaav1#
好吧,这是你的问题。你想要一个轮子吗
00
以及30
你想无限滚动它,所以它从30
至00
每一次都增加一个小时轮,对吗?这基本上就是TimePicker
默认情况下工作。问题是,从
NumberPicker
:注:如果项目数,即范围(
getMaxValue()
-getMinValue()
)小于选择轮上显示的项目数,选择轮将不缠绕。max-min是一种非常尴尬的表达方式(项目的数量实际上是+1),但是基本上微调器一次在屏幕上显示三个项目,并且您需要有三个以上的项目(因此至少有一个项目在屏幕外)才能进行 Package 。这就是为什么它适用于你的其他时间间隔(15分钟给你四个项目,这样就结束了)
不幸的是,我不认为有很多你可以做的-没有 Package 是硬编码的行为
NumberPicker
. 你可以用四样东西来伪装,00
,30
,00
,30
但在内部,这仍然是价值观0
至3
,一次转动轮子,而不是两次。以及TimePicker
使用这些值,与minValue
以及maxValue
检查车轮何时缠绕,小时需要自动改变。处理此问题的侦听器(在
TimePickerSpinnerDelegate
)不能被阅读,所以你不能把它包在一个听者里假装它在听0
1
01
相反。监听器还引用了一组内部私有变量和方法,因此不能将其复制到自己的代码中并进行调整。您必须根据事物的外观重新实现整个小部件及其相关类如果对你有用,你可以扔两个
NumberPicker
我们在一起,自己重拍。你会失去像am/pm这样的功能,可能是可访问性,这取决于你是否在意。基本上是这样的:好久没碰java了!也许有更好的办法。但是,侦听器只是检查它是否在四项列表上的两个滚动点之间传递(从何处开始)
30
至00
以一种方式滚动,反之亦然(以另一种方式滚动)。这基本上就是TimePicker
作品