我创建了一个普通的TimePickerDialog,它需要用户的时间输入。但我想更改此设置,以便它仅接受最小和最大小时值内的一小时。我想动态设置最小值和最大值(创建时通过参数或其他方式发送(
public class TimePickerDialogFragment extends DialogFragment {
public static final String EXTRA_TIME = "com.android.XYZ.time";
private static final String ARG_TIME = "time";
private TimePicker mTimePicker;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return null;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
View v = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_time, null);
mTimePicker = (TimePicker) v.findViewById(R.id.dialog_time_picker);
return new AlertDialog.Builder(getActivity()).
setView(v).
setTitle("Choose a time").
setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(Build.VERSION.SDK_INT < 23){
int getHour = mTimePicker.getCurrentHour();
int getMinute = mTimePicker.getCurrentMinute();
int getSecond = 0;
Time time = new Time(getHour,getMinute,getSecond);
//Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, time);
} else{
int getHour = mTimePicker.getHour();
int getMinute = mTimePicker.getMinute();
int getSecond = 0;
Time time = new Time(getHour,getMinute,getSecond);
//Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, time);
}
}
}).create();
}
/**
* To send the chosen time result to Required class thorough intent
* @param resultCode
* @param time
*/
private void sendResult(int resultCode, Time time){
if(getTargetFragment() == null){
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA_TIME, time);
getTargetFragment().onActivityResult(getTargetRequestCode(),resultCode,intent);
}
/**
* Creating new instance of Time Picker
* @param time
* @return
*/
public static TimePickerDialogFragment newInstance(Time time){
Bundle args = new Bundle();
args.putSerializable(ARG_TIME, time);
TimePickerDialogFragment fragment = new TimePickerDialogFragment();
fragment.setArguments(args);
return fragment;
}
}
您可以设置 TimeChangedListener 并覆盖其 onTimeChanged
方法,以使用 setHour
将小时设置为最接近的允许小时。
例如,这将强制所选小时在 12(12pm(和 15(3pm(之间:
mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker timePicker, int hourOfDay, int minute) {
if(hourOfDay < 12) {
timePicker.setHour(12);
}
else if(hourOfDay > 15) {
timePicker.setHour(15);
}
}
});