2015-09-04 189 views
4

我有一個自定義對話框,帶有一個timepicker和一個datepicker。我想將timepicker的分鐘旋鈕集合設置爲[0,15,30,45],即15分鐘的時間間隔。間隔15分鐘的Timepicker

現在我看到幾個解決方案,但似乎沒有覆蓋的事實,用戶界面將顯示下一個和以前分鐘爲-1和+1分鐘選擇分鐘例如29,30,31,顯示用戶。

此外,即時通訊不太清楚,我怎麼我的自定義timepicker附加到活動 - 我不需要customerTimePicker XML組件做到這一點?

所以總之 - 我是否調整本地timepicker或需要建立一個自定義的XML和類?

我有什麼目前 佈局:

<TimePicker 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/timePicker_fixture" 
    android:layout_weight="1" /> 

活動

TimePicker timePicker_fixture = (TimePicker) dialog.findViewById(R.id.timePicker_fixture); 
timePicker_fixture.setIs24HourView(true); 

一個建議的自定義類(如何使用這個 - 我需要在我的佈局中的自定義XML組件?)

public class CustomTimePickerDialog extends TimePickerDialog { 

    private final static int TIME_PICKER_INTERVAL = 15; 
    private TimePicker timePicker; 
    private final OnTimeSetListener callback; 

    public CustomTimePickerDialog(Context context, OnTimeSetListener callBack, 
            int hourOfDay, int minute, boolean is24HourView) { 
     super(context, TimePickerDialog.THEME_HOLO_LIGHT, callBack, hourOfDay, minute/TIME_PICKER_INTERVAL, 
       is24HourView); 
     this.callback = callBack; 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if (callback != null && timePicker != null) { 
      timePicker.clearFocus(); 
      callback.onTimeSet(timePicker, timePicker.getCurrentHour(), 
        timePicker.getCurrentMinute() * TIME_PICKER_INTERVAL); 
     } 
    } 

    @Override 
    protected void onStop() { 
    } 

    @Override 
    public void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     try { 
      Class<?> classForid = Class.forName("com.android.internal.R$id"); 
      Field timePickerField = classForid.getField("timePicker"); 
      this.timePicker = (TimePicker) findViewById(timePickerField 
        .getInt(null)); 
      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])); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

} 
+0

你看這裏 - http://stackoverflow.com/questions/2580216/android-timepicker-minutes-to-15? – Oleksandr

+0

好吧,工作:)它有點....凌亂?即使使用它,但我不明白的suppressLint(「NewApi」) – Fearghal

+0

只是刪除此註釋,你會看到行錯誤(如果你的項目api級別少「NewApi」) – Oleksandr

回答

4

增加了以下內容

@SuppressLint("NewApi") 
    private void setTimePickerInterval(TimePicker timePicker) { 
     try { 
      Class<?> classForid = Class.forName("com.android.internal.R$id"); 
      // Field timePickerField = classForid.getField("timePicker"); 

      Field field = classForid.getField("minute"); 
      minutePicker = (NumberPicker) timePicker 
        .findViewById(field.getInt(null)); 

      minutePicker.setMinValue(0); 
      minutePicker.setMaxValue(7); 
      displayedValues = new ArrayList<String>(); 
      for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) { 
       displayedValues.add(String.format("%02d", i)); 
      } 
      for (int i = 0; i < 60; i += TIME_PICKER_INTERVAL) { 
       displayedValues.add(String.format("%02d", i)); 
      } 
      minutePicker.setDisplayedValues(displayedValues 
        .toArray(new String[0])); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
在我的活動

,然後調用此方法從OnCreate中()。當然你可以從任何需要的地方打電話給它。

0
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() 
{ 
    @Override 
    public void onTimeChanged (TimePicker view, int hourOfDay, int minute) 
    { 
     view.setOnTimeChangedListener(null); 
     int currentMinute = roundMinute(minute); 
     view.setCurrentMinute(59); 
     view.setCurrentMinute(currentMinute); 
     view.setOnTimeChangedListener(this); 
    } 
}); 

private static int roundMinute (int minute) 
{ 
    return minute == 0 ? 0 : minute/5*5; 
} 
0
/** 
* Set TimePicker interval by adding a custom minutes list 
* 
* @param timePicker 
*/ 
private void setTimePickerInterval(TimePicker timePicker) { 
    try { 
     int TIME_PICKER_INTERVAL = 15; 
     NumberPicker minutePicker = (NumberPicker) timePicker.findViewById(Resources.getSystem().getIdentifier(
       "minute", "id", "android")); 
     minutePicker.setMinValue(0); 
     minutePicker.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)); 
     } 
     minutePicker.setDisplayedValues(displayedValues.toArray(new String[0])); 
    } catch (Exception e) { 
     Log.e(TAG, "Exception: " + e); 
    } 
}