我正在研究安卓系统中的DatePicker和TimePicker。我正在从服务器获取开始时间和时间。我可以使用this link以编程方式设置最大日期和最小日期
我想在timepicker中设置最小时间(07:00 )和最大时间(10:00),并保持30分钟的间隔。我试着使用This Link
我需要的是设置timepicket与最小07:00和最大时间=10:00和间隔07:00,07:30,08:00等。
下面是相同的代码`
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TimePicker pn = (TimePicker) findViewById(R.id.tp_powernap);
pn.setCurrentHour(7);
pn.setCurrentMinute(0);
System.out.println("timepicker erstellt");
pn.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
System.out.println("Tastatur geblockt");
pn.setOnTimeChangedListener(StartTimeChangedListener);
System.out.println("starttimechangedlistener");
pn.setIs24HourView(false);
}
private TimePicker.OnTimeChangedListener StartTimeChangedListener =
new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
updateDisplay(view, hourOfDay, minute);
}
};
private TimePicker.OnTimeChangedListener NullTimeChangedListener =
new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
}
};
private void updateDisplay(TimePicker timePicker, int hourOfDay, int minute) {
int nextMinute = 0;
timePicker.setOnTimeChangedListener(NullTimeChangedListener);
if (minute >= 45 && minute <= 59)
nextMinute = 45;
else if (minute >= 30)
nextMinute = 30;
else if (minute >= 15)
nextMinute = 15;
else if (minute > 0)
nextMinute = 0;
else {
nextMinute = 45;
}
if (minute - nextMinute == 1) {
if (minute >= 45 && minute <= 59)
nextMinute = 00;
else if(minute >= 30)
nextMinute = 45;
else if(minute >= 15)
nextMinute = 30;
else if(minute > 0)
nextMinute = 15;
else {
nextMinute = 15;
}
}
timePicker.setCurrentMinute(nextMinute);
timePicker.setOnTimeChangedListener(StartTimeChangedListener);
}发布于 2014-12-19 20:59:58
仅供参考(这是一个老问题)。该间隔可以使用以下hack来实现:
Class<?> classForid = Class.forName("com.android.internal.R$id");
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]));另请参阅here
Start- the和Endtime可以用类似的方式设置,但AM/PM标志有问题。如果您不使用am/pm,而是始终以24小时格式显示时间,您的问题就解决了;-)
if (startHour != -1 && endHour != -1) {
Field field = classForid.getField("hour");
NumberPicker hourSpinner = (NumberPicker) timePicker
.findViewById(field.getInt(null));
hourSpinner.setMinValue(startHour);
hourSpinner.setMaxValue(endHour);
List<String> displayedValues = new ArrayList<String>();
if (timePicker.is24HourView()) {
for (int i = startHour; i <= endHour; ++i) {
displayedValues.add(String.format("%02d", i));
}
} else {
for (int i = startHour; i <= 12; ++i) {
displayedValues.add(String.format("%d", i));
}
for (int i = 1; i <= endHour % 12; ++i) {
displayedValues.add(String.format("%d", i));
}
}
hourSpinner.setDisplayedValues(displayedValues
.toArray(new String[0]));
}发布于 2021-09-08 16:34:23
试试这段代码。
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
private var MIN_MINUTE= 0
private var MAX_MINUTE = 60
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 = MIN_MINUTE
mMinuteSpinner.maxValue = MAX_MINUTE / 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)
}
fun setMinMinute(min: Int) {
MIN_MINUTE = min
setUp()
}
fun setMaxMinute(max: Int) {
MAX_MINUTE = max
setUp()
}
fun setMinuteInterval(interval: Int) {
MINUTE_INTERVAL = interval
setUp()
}
companion object {
@JvmStatic
@BindingAdapter("time_picker_set_minute_interval")
fun setMinuteInterval(view: TimePickerInterval, interval: Int?) {
interval?.let {
view.setMinuteInterval(it)
}
}
}
}https://stackoverflow.com/questions/8623058
复制相似问题