android - 如何为TimePickerDialog设置最大和最小时间限制,供用户在一定的小时范围内选择?

标签 android

我创建了一个普通的 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 点(12 点)和 15 点(下午 3 点)之间:

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);
            }
        }
    });

关于android - 如何为TimePickerDialog设置最大和最小时间限制,供用户在一定的小时范围内选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49736171/

相关文章:

android - 在 componentDidMount() 函数中获取多个 API 请求 react native

java - 使用 mapquest 在 Android 上获取路线点

java - android中的改造-使用对象而不是json中的数组

android - getParent 返回错误的 ViewGroup

android - 如何将值从 Activity 传递到tabactivity

java - 安卓 TreeView

android - 在textview android上捏缩放

Android:如何在代码中使用 dip(与密度无关的像素)?

java - 在 Android 中的两个不同 Activity 中安全访问登录数据

android - 在android中录制视频时旋转图像帧