TimePicker показва само минути и задава максимални минути, ако потребителят въведе време с клавиатурата

Ето как изглежда моят часовник в момента. Искам да показва само минутите и минутите само до максимум 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);

    }

person kirbby    schedule 21.01.2011    source източник


Отговори (2)


така направих частта с максималните и минималните и стъпките от 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);

    }
person kirbby    schedule 01.02.2011

Ще трябва да напишете своя собствена джаджа. Това, което искате, не се поддържа от джаджа TimePicker или TimePickerDialog.

person CommonsWare    schedule 27.01.2011
comment
само за да скрия часа или също така да покажа само минутите до 30. Друго нещо, което искам да направя, е да покажа само 5,10,15,20,25 и 30 минути с бутона нагоре и надолу. Намерих само решение да го направя с нагоре или надолу, а другото не работи. - person kirbby; 31.01.2011
comment
@kirbby: Отговорът ми все още остава в сила: ще трябва да напишете своя собствена джаджа. - person CommonsWare; 31.01.2011
comment
добре, разбрах нещото с минутите от минимум 5 до максимум 30 на стъпки от 5 минути, не написах нова ;) и мисля, че ще игнорирам часовата част и ще я оставя там, защото потребителят не може да въведе sth там . - person kirbby; 01.02.2011