【问题标题】:How to set Android TimePicker with 5 minutes interval (Nougat)如何以 5 分钟的间隔设置 Android TimePicker (Nougat)
【发布时间】:2018-02-16 04:12:40
【问题描述】:

我使用的是 Android 7.0(牛轧糖)
我创建 EditText 来显示时间,点击它时,它会显示一个 TimePicker,并在 EditText 中更新时间
一切顺利,但现在我想展示一个间隔 5 分钟的 Timepicker
这意味着用户只能选择 5,10,15,20...分钟
这是我的代码:

public class TimePickerFragment extends DialogFragment
    implements TimePickerDialog.OnTimeSetListener {

private EditText mEditText;
private int initHour;
private int initMinute;

public void setEditText(EditText editText) {
    mEditText = editText;
}

public void setInitHour(int hour) {
    initHour = hour;
}

public void setInitMinute(int minute) {
    initMinute = minute;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new TimePickerDialog(getActivity(), this, initHour, initMinute, DateFormat.is24HourFormat(getActivity()));
}

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    SimpleDateFormat timeSdf = new SimpleDateFormat("HH:mm", Locale.US);
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);

    mEditText.setText(timeSdf.format(calendar.getTime()));
}

}

在活动中:

TimePickerFragment dialogFragment = new TimePickerFragment();
dialogFragment.setInitHour(11);
dialogFragment.setInitMinute(30);
dialogFragment.setEditText(mStartTimeText);
dialogFragment.show(getFragmentManager(), "startTimePicker");

我研究过相关帖子,但所有解决方案都不是最新的
我找不到适合牛轧糖版本的解决方案
如果对我有任何提示,我将不胜感激!谢谢。

【问题讨论】:

标签: android android-7.0-nougat android-timepicker


【解决方案1】:

TimePicker 不支持间隔。您必须实现自定义视图才能实现该功能。 复制粘贴解决方案;)。不客气。

import android.content.Context
import android.util.AttributeSet
import android.widget.NumberPicker
import android.widget.TimePicker
import androidx.databinding.BindingAdapter
import java.lang.reflect.Field
import java.util.*


    class TimePickerInterval @JvmOverloads constructor(
            context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
    ) : TimePicker(context, attrs, defStyleAttr) {
    
        private var MINUTE_INTERVAL = 1
        override fun getCurrentMinute(): Int {
            return super.getCurrentMinute() * MINUTE_INTERVAL
        }
    
        override fun getMinute(): Int {
            return super.getMinute() * MINUTE_INTERVAL
        }
    
        override fun onAttachedToWindow() {
            super.onAttachedToWindow()
            setUp()
        }
    
        private fun setUp() {
            try {
                val classForid = Class.forName("com.android.internal.R\$id")
                val field: Field = classForid.getField("minute")
                val mMinuteSpinner = findViewById<NumberPicker>(field.getInt(null))
                mMinuteSpinner.minValue = 0
                mMinuteSpinner.maxValue = 60 / MINUTE_INTERVAL - 1
                val displayedValues: MutableList<String> = ArrayList()
                var i = 0
                while (i < 60) {
                    displayedValues.add(String.format("%02d", i))
                    i += MINUTE_INTERVAL
                }
                mMinuteSpinner.displayedValues = displayedValues.toTypedArray()
    
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    
        override fun setOnTimeChangedListener(onTimeChangedListener: OnTimeChangedListener) {
            super.setOnTimeChangedListener { tp, hour, minute ->
                onTimeChangedListener.onTimeChanged(tp, hour, minute * MINUTE_INTERVAL)
            }
        }
    
        override fun setMinute(minute: Int) {
            super.setMinute(minute/MINUTE_INTERVAL)
        }
    
        companion object {
            @JvmStatic
            @BindingAdapter("time_picker_set_minute_interval")
            fun setInterval(view: TimePickerInterval, interval: Int?) {
                interval?.let {
                    view.MINUTE_INTERVAL = interval
                    view.setUp()
                }
            }
        }
    }

在您的 XML 中:

<com.gixon.shared.widgets.TimePickerInterval
    android:id="@+id/tp_to"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:timePickerMode="spinner"
    time_picker_set_minute_interval="@{5}"
    />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多