2011-01-21 40 views
0

這就是我的時間選擇器現在的樣子。 我希望它只顯示分鐘和分鐘只能達到最大值30. 它工作正常,但是當你用鍵盤輸入時間時,它將時間設置爲0,但我希望它達到最大值。 所以如果用戶輸入50,它應該去30,我該怎麼做? 以及如何隱藏timepicker的小時,因爲這裏不需要它。如果用戶使用鍵盤輸入時間,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分鐘上下。我只找到一個解決方案,用up或down來完成,而另一個則不行。 – kirbby 2011-01-31 10:28:29

4

這就是我如何做的最大,最小值以及5分鐘步驟的一部分,也有對計算器的樣品,但與他們的方法你無法同時使用向上和向下按鈕,用我的方法,它的工作原理:

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

    } 
相關問題