首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TimePicker Android中设置间隔30分钟的开始时间和结束时间?

如何在TimePicker Android中设置间隔30分钟的开始时间和结束时间?
EN

Stack Overflow用户
提问于 2011-12-24 14:13:44
回答 2查看 3.3K关注 0票数 4

我正在研究安卓系统中的DatePicker和TimePicker。我正在从服务器获取开始时间和时间。我可以使用this link以编程方式设置最大日期和最小日期

我想在timepicker中设置最小时间(07:00 )和最大时间(10:00),并保持30分钟的间隔。我试着使用This Link

我需要的是设置timepicket与最小07:00和最大时间=10:00和间隔07:00,07:30,08:00等。

下面是相同的代码`

代码语言:javascript
复制
  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);

}
EN

回答 2

Stack Overflow用户

发布于 2014-12-19 20:59:58

仅供参考(这是一个老问题)。该间隔可以使用以下hack来实现:

代码语言:javascript
复制
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小时格式显示时间,您的问题就解决了;-)

代码语言:javascript
复制
        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]));
        }
票数 0
EN

Stack Overflow用户

发布于 2021-09-08 16:34:23

试试这段代码。

代码语言:javascript
复制
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)
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8623058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档