- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想阻止用户输入当前时间之前的时间。我使用 Date
提供的 before
方法检查有效时间。如何防止对话框在此有效性检查中接受无效时间?
我省略了初始化选定时间的多余代码(作为 Date
)。
final Calendar mcurrentTime = Calendar.getInstance();
final int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
final int minute = mcurrentTime.get(Calendar.MINUTE);
final TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
//PSEUDO: Date selectedDateTime init here
if (selectedDateTime.before(mcurrentTime.getTime())) {
// prevent user from selecting time
}
}
}, hour, minute, true);//true = 24 hour time
mTimePicker.setTitle("Select Time");
mTimePicker.show();
最佳答案
Here原帖。
按照回答,您应该添加 TimePickerDialog 类。
public class RangeTimePickerDialog extends TimePickerDialog {
private int minHour = -1;
private int minMinute = -1;
private int maxHour = 25;
private int maxMinute = 25;
private int currentHour = 0;
private int currentMinute = 0;
private Calendar calendar = Calendar.getInstance();
private DateFormat dateFormat;
public RangeTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {
super(context, callBack, hourOfDay, minute, is24HourView);
currentHour = hourOfDay;
currentMinute = minute;
dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
try {
Class<?> superclass = getClass().getSuperclass();
Field mTimePickerField = superclass.getDeclaredField("mTimePicker");
mTimePickerField.setAccessible(true);
TimePicker mTimePicker = (TimePicker) mTimePickerField.get(this);
mTimePicker.setOnTimeChangedListener(this);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
}
public void setMin(int hour, int minute) {
minHour = hour;
minMinute = minute;
}
public void setMax(int hour, int minute) {
maxHour = hour;
maxMinute = minute;
}
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
Log.d("DADADADA", "onTimeChanged");
boolean validTime = true;
if (hourOfDay < minHour || (hourOfDay == minHour && minute < minMinute)) {
validTime = false;
}
if (hourOfDay > maxHour || (hourOfDay == maxHour && minute > maxMinute)) {
validTime = false;
}
if (validTime) {
currentHour = hourOfDay;
currentMinute = minute;
}
updateTime(currentHour, currentMinute);
updateDialogTitle(view, currentHour, currentMinute);
}
private void updateDialogTitle(TimePicker timePicker, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
String title = dateFormat.format(calendar.getTime());
setTitle(title);
}
}
之后,将 TimePickerDialog 替换为 RangeTimePickerDialog
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Calendar mcurrentTime = Calendar.getInstance();
final int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
final int minute = mcurrentTime.get(Calendar.MINUTE);
final RangeTimePickerDialog mTimePicker;
mTimePicker = new RangeTimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
Log.d("TAG", "inside OnTimeSetListener");
}
}, hour, minute, true);//true = 24 hour time
mTimePicker.setTitle("Select Time");
mTimePicker.setMin(hour, minute);
mTimePicker.show();
}
}
在那之后,检查你的对话框,时间没有超过限制,我已经用 setMax() 或 setMin() 检查了这个并且只设置了一个。
关于android - 防止用户选择过去的时间 - TimePickerDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273362/
我是 Android 新手。在这里,我又提出了另一个“简单”的问题。我希望你可以帮助我。我只想要一个在对话框中显示 TimePicker 的按钮。当我在时间选择器中设置时间时,我想获取选定的时间。我正
我正在尝试为我的 TimePickerDialog 设置一个标题。我看过几个例子,但我无法获得我想要的结果。这就是我想要得到的。 但不知道如何在图片中放置“请选择日期”这样的标题。 到目前为止我的代码
当我滚动分钟时,Android Timepickerdialog 会不合逻辑地更改小时数。我在 timepickerdialog 中将分钟间隔设置为 30 分钟,因此分钟的值为 00 和 30。例如,
我正在尝试制作一个简单的TimePickerDialog。当用户单击 editText 框时,时间选择器就会出现。你能帮忙吗?下面的代码不会显示该对话框。感谢您的帮助。 package com.exa
我使用以下代码行创建一个 TimePickerDialog : new TimePickerDialog(context,new Listener(),0,1,true); . 我的问题是,TimeP
Android Studio: with single textView and single TimePickerDialog as a nested local class. When the T
我正在开发一个 Android 应用程序,现在我的 UI 的一部分有问题:TimePickerDialog。我希望对话框的顶部是橙色而不是经典的 我知道我可以创建一个自定义主题,但我的老板希望它在 4
我写这段代码是为了制作一个 TimePickerDialog盒子 btnDialBoxTime.setOnClickListener(new OnClickListener() { publi
我如何禁用 TimePickerDialog 在按下设置时关闭? 我需要检查值是否合适,如果不是,我不希望它被忽略。 mTimePicker.setCancelable(true); 但我确实希望用户
我有一个扩展 DialogFragment 的类,在这个类中我使用了 TimePickerDialog。 时间选择器工作,但问题是有时 CANCEL 和 OK 按钮不显示,如下图所示。 按钮有效但不可
重要编辑:我做了一些搜索,似乎 OnTimeChangedListener 不会在 Android 5.0 (API 21) 中触发。 Gustavo 在下面的回答适用于 API 20 或更低版本,以
我有一个带有“TimePreference”类的 TimePickerDialog 首选项,它扩展了 DialogPreference: public class TimePreference ext
在我的项目中,我使用 TimepickerDialog 在 TextView 中显示时间。我的 Timepickerdialog 显示为时钟,但我希望它显示为微调器。我该怎么做? 最佳答案 使用此代码
我创建了一个 TimePickerDialog 并更改了默认颜色。此外,我想将样式更改为不同的样式。 我找不到同时更改颜色和样式的方法。 这就是我创建 TimePickerDialog 的方式: Ti
我有一个 Activity - TimePickerActivity - 它创建了一个 TimePickerDialog。我有一个 onTimeSetListener,它响应 Set 按钮,在它结束时
我正在寻找一种方法来设置 Android TimePickerDialog 上可选择的最大和最小时间,并将默认分钟间隔从 1 分钟更改为 5 分钟, 我认为这很容易,但我找不到方法! 最佳答案 此答案
我正在使用时间选择器对话框来选择时间,但我最近观察到,当用户选择时间时,它允许用户选择已经过去的时间。示例:如果当前日期是 25-03-2020,时间是下午 5:00,但时间选择器允许选择下午 5:0
哈罗! 我正在尝试编写我的第一个 Android 应用程序,但遇到了困难。 我想允许用户为每日计划设置“开始”和“停止”时间。我已经成功实现了 TimePickerDialog 及其旁边的 TextV
我有一个简单/默认的 TimePickerDialog: TimePickerDialog timePickerDialog = new TimePickerDialog(getActivity())
只允许更改时间,怎么办? 在简单的TimePicker中,我可以设置TimePicker.OnTimeChangedListener接口(interface),但是TimePickerDialog中没
我是一名优秀的程序员,十分优秀!