【问题标题】:TimePicker only show minutes and setmaximum minutes if the user enter a time with the keyboard如果用户使用键盘输入时间,TimePicker 仅显示分钟和 setmaximum 分钟
【发布时间】:2011-02-01 15:37:13
【问题描述】:

这就是我的时间选择器现在的样子。 我希望它只显示分钟和分钟,最多只能显示 30 分钟。 它工作正常,但是当你用键盘输入时间时,它会将时间设置为 0,但我希望它达到最大值。 所以如果用户输入 50 它应该到 30,我该怎么做? 以及如何隐藏时间选择器的小时,因为这里不需要它。

protected void onCreate(Bundle savedInstanceState) {
    System.out.println("Powernap");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.powernap);
    TimePicker pn = (TimePicker) findViewById(R.id.tp_powernap);

    pn.setOnTimeChangedListener(StartTimeChangedListener);
    pn.setIs24HourView(true);
}

    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) { 

        // do calculation of next time 
        int nextMinute = 0;
        int nextHour = 0;
        if (minute > 30){
            System.out.println("Minute+30");
            nextMinute = 30;
            // set minute
            timePicker.setCurrentMinute(nextMinute);
        }
        else {          
            System.out.println("minute 0");
            nextMinute = 0;
        }
        if (hourOfDay != 0){
            System.out.println("hour>0");
            nextHour = 24;
        }

        // remove ontimechangedlistener to prevent stackoverflow/infinite loop
        timePicker.setOnTimeChangedListener(NullTimeChangedListener);

        // set minute
        timePicker.setCurrentMinute(timePicker.getCurrentMinute()+nextMinute);

        //set hour
        timePicker.setCurrentHour(nextHour);

        // hook up ontimechangedlistener again
        timePicker.setOnTimeChangedListener(StartTimeChangedListener);

    }

【问题讨论】:

    标签: android timepicker


    【解决方案1】:

    这就是我用最大和最小以及 5 分钟的步骤完成部分的方式,stackoverflow 上有示例,但是使用它们的方法你不能同时使用向上和向下按钮,使用我的方法它可以工作:

    public class Powernap extends Activity {
    
    
    
    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("Powernap");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.powernap);
        TimePicker pn = (TimePicker) findViewById(R.id.tp_powernap);
        pn.setCurrentMinute(5);
        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(true);
    }
    
    
        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) { 
    
            // do calculation of next time 
            int nextMinute = 0;
            int nextHour = 0;
            if (minute >= 30 && minute <= 59){
                System.out.println("Minute+30");
                nextMinute = 30;
            }
            else if(minute == 26){
                System.out.println("Minute auf 30");
                nextMinute = 30;
            }
            else if(minute == 25 || minute == 21 || minute == 29){
                System.out.println("Minute auf 25");
                nextMinute = 25;
            }
            else if(minute == 20 || minute == 16 || minute == 24){
                System.out.println("Minute auf 20");
                nextMinute = 20;
            }
            else if(minute == 15 || minute == 11 || minute == 19){
                System.out.println("Minute auf 15");
                nextMinute = 15;
            }
            else if(minute == 10 || minute == 6 || minute == 14){
                System.out.println("Minute auf 10");
                nextMinute = 10;
            }
            else if(minute == 5 || minute == 1 || minute == 9 || minute < 5){
                System.out.println("Minute auf 5");
                nextMinute = 5;
            }
    
    
    
    
    
            if (hourOfDay != 0){
                System.out.println("hour>0");
                nextHour = 24;
            }
    
            // remove ontimechangedlistener to prevent stackoverflow/infinite loop
            timePicker.setOnTimeChangedListener(NullTimeChangedListener);
    
            // set minute
            timePicker.setCurrentMinute(nextMinute);
    
            //set hour
            timePicker.setCurrentHour(nextHour);
    
            // hook up ontimechangedlistener again
            timePicker.setOnTimeChangedListener(StartTimeChangedListener);
    
        }
    

    【讨论】:

      【解决方案2】:

      您需要编写自己的小部件。 TimePicker 小部件或 TimePickerDialog 不支持您想要的。

      【讨论】:

      • 只隐藏小时,或者只显示分钟到 30。我想做的另一件事是用按钮只显示 5、10、15、20、25 和 30 分钟上和下。我只找到了一个解决方案,可以用 up 或 down 来做,而另一个不工作。
      • @kirbby:我的回答仍然有效:您必须编写自己的小部件。
      • 好的,我在 5 分钟的步骤中得到了从最小 5 到最大 30 分钟的东西,没有写新的;)我想我会忽略小时部分,让它放在那里,因为用户不能在那里输入。
      猜你喜欢
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2018-09-18
      • 1970-01-01
      • 2012-06-24
      相关资源
      最近更新 更多