2011-01-21 3 views
0

Вот как мой моментпик смотрит на данный момент. Я хочу, чтобы он показывал только минуты и минуты только до максимума 30. Он отлично работает, но когда u вводит время с клавиатуры, оно устанавливает время на 0, но я хочу, чтобы он достиг максимума. поэтому, если пользователь вводит 50, он должен перейти к 30, как я могу это сделать? и как я могу скрыть час времени, потому что он здесь не нужен.TimePicker показывает только минуты и устанавливает максимальные минуты, если пользователь вводит время с клавиатуры.

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

    } 

ответ

2

Вам нужно будет написать собственный виджет. То, что вы хотите, не поддерживается виджем TimePicker или TimePickerDialog.

+0

только для того, чтобы скрыть час, а также отобразить только минуты до 30. Еще одна вещь, которую я хочу сделать, - показать только 5,10,15,20,25 и 30 минут с помощью кнопки вверх и вниз. Я только нашел решение, чтобы сделать это с вверх или вниз, а другой не работает. – kirbby

+0

@kirbby: Мой ответ по-прежнему стоит: вам придется написать свой собственный виджет. – CommonsWare

+0

ok Я получил вещь с минимальными значениями от 5 до 30 с шагом 5 минут, не написал новый;), и я думаю, что я проигнорирую часть часа и пусть это там, потому что пользователь не может войти в sth там. – kirbby

4

вот как я сделал часть с максимумом и минимумом, и шагами 5mins, есть образцы на 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); 

    }