间隔15分钟的Timepicker
问题描述:
我有一个自定义对话框,带有一个timepicker和一个datepicker。我想将timepicker的分钟旋钮集合设置为[0,15,30,45],即15分钟的时间间隔。间隔15分钟的Timepicker
现在我看到几个解决方案,但似乎没有覆盖的事实,用户界面将显示下一个和以前分钟为-1和+1分钟选择分钟例如29,30,31,显示用户。
此外,即时通讯不太清楚,我怎么我的自定义timepicker附加到活动 - 我不需要customerTimePicker XML组件做到这一点?
所以总之 - 我是否调整本地timepicker或需要建立一个自定义的XML和类?
我有什么目前 布局:
<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker_fixture"
android:layout_weight="1" />
活动
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();
}
}
在我的活动
,然后调用此方法从OnCreate中()。当然你可以从任何需要的地方打电话给它。
答
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener()
{
@Override
public void onTimeChanged (TimePicker view, int hourOfDay, int minute)
{
view.setOnTimeChangedListener(null);
int currentMinute = roundMinute(minute);
view.setCurrentMinute(59);
view.setCurrentMinute(currentMinute);
view.setOnTimeChangedListener(this);
}
});
private static int roundMinute (int minute)
{
return minute == 0 ? 0 : minute/5*5;
}
答
答案上面并没有在Android的7牛轧糖为我工作,基本上日期选择器完全由时钟模式改变......我有种与https://gist.github.com/jeffdgr8/6bc5f990bf0c13a7334ce385d482af9f合并这段代码,然后将其默认设定TimePickerDialog的模式显示微调控制,然后运行代码显示只有15分钟的时间间隔。
其结果是在这里:https://gist.github.com/smaugho/14dae83f3284fa05455ee0a9e4f13099
答
/**
* Set TimePicker interval by adding a custom minutes list
*
* @param timePicker
*/
private void setTimePickerInterval(TimePicker timePicker) {
try {
int TIME_PICKER_INTERVAL = 15;
NumberPicker minutePicker = (NumberPicker) timePicker.findViewById(Resources.getSystem().getIdentifier(
"minute", "id", "android"));
minutePicker.setMinValue(0);
minutePicker.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));
}
minutePicker.setDisplayedValues(displayedValues.toArray(new String[0]));
} catch (Exception e) {
Log.e(TAG, "Exception: " + e);
}
}
你看这里 - http://*.com/questions/2580216/android-timepicker-minutes-to-15? – Oleksandr
好吧,工作:)它有点....凌乱?即使使用它,但我不明白的suppressLint(“NewApi”) – Fearghal
只是删除此注释,你会看到行错误(如果你的项目api级别少“NewApi”) – Oleksandr