2016-05-16 15 views
2

私はMaterialDateTimePickerを使用しています。毎月の特定の曜日(日曜日など)を無効にしたいこのpostに記載されていますが、私たちはこのライブラリを使って行うことができますが、how to disable particular weekdays?短いコードを使用して月数を制限することはできますが、月曜日の数を制限して平日の選択を無効にすることはできません。MaterialDateTimePickerの毎月の日曜日を無効にする

public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener { 
 

 
    private TextView dateTextView; 
 
    private CheckBox modeDarkDate; 
 
    private CheckBox vibrateDate; 
 
    private CheckBox dismissDate; 
 
    private CheckBox limitDates; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     // Find our View instances 
 
     dateTextView = (TextView)findViewById(R.id.date_textview); 
 
     Button dateButton = (Button)findViewById(R.id.date_button); 
 

 

 
     modeDarkDate = (CheckBox)findViewById(R.id.mode_dark_date); 
 
     vibrateDate = (CheckBox) findViewById(R.id.vibrate_date); 
 
     dismissDate = (CheckBox) findViewById(R.id.dismiss_date); 
 
     limitDates = (CheckBox) findViewById(R.id.limit_dates); 
 

 
     // check if picker mode is specified in Style.xml 
 
     modeDarkDate.setChecked(Utils.isDarkTheme(this, modeDarkDate.isChecked())); 
 

 

 
     // Show a datepicker when the dateButton is clicked 
 
     dateButton.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       Calendar now = Calendar.getInstance(); 
 
       DatePickerDialog dpd = DatePickerDialog.newInstance(
 
         MainActivity.this, 
 
         now.get(Calendar.YEAR), 
 
         now.get(Calendar.MONTH), 
 
         now.get(Calendar.DAY_OF_MONTH) 
 
       ); 
 
       dpd.setThemeDark(modeDarkDate.isChecked()); 
 
       dpd.vibrate(vibrateDate.isChecked()); 
 
       dpd.dismissOnPause(dismissDate.isChecked()); 
 

 

 
       if (limitDates.isChecked()) { 
 
       /* Calendar[] dates = new Calendar[13]; 
 
        for(int i = -6; i <= 6; i++) { 
 
         Calendar date = Calendar.getInstance(); 
 
         date.add(Calendar.MONTH, i); 
 
         dates[i+6] = date; 
 
        } */ 
 
              
 
       // Add code here to disbale weekdays like Sundays. 
 

 

 

 

 

 
        // dpd.setSelectableDays(dates); 
 
       } 
 

 
       dpd.show(getFragmentManager(), "Datepickerdialog"); 
 
      } 
 
     }); 
 
    } 
 

 
    @Override 
 
    public void onResume() { 
 
     super.onResume(); 
 
     DatePickerDialog dpd = (DatePickerDialog) getFragmentManager().findFragmentByTag("Datepickerdialog"); 
 

 
     if(dpd != null) dpd.setOnDateSetListener(this); 
 
    } 
 

 

 

 
    @Override 
 
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { 
 
     String date = "You picked the following date: "+dayOfMonth+"/"+(++monthOfYear)+"/"+year; 
 
     dateTextView.setText(date); 
 
    } 
 
}

+0

この参照を確認してください:http://stackoverflow.com/questions/14118894/how-to-get-day-from-specified-date-in-android –

+0

クイック返信ありがとう。カレンダー[]配列にこのスイッチケースを追加するにはどうすればいいですか? –

+0

datepickerやカスタムカレンダービューを使用して日曜日やその他の曜日を無効にする方法が分かっている場合は、コメントしてください。 –

答えて

7

それは多分この回答に遅れを少しですが、私は他の人を助けることが解決策を持っています。 、次のことを試してください:あなたは、長い期間のためにそれを行うことを望むちょうど一週間変更する必要がある場合

// Calendar saturday; 
    Calendar sunday; 
    List<Calendar> weekends = new ArrayList<>(); 
    int weeks = 5; 

    for (int i = 0; i < (weeks * 7) ; i = i + 7) { 
     sunday = Calendar.getInstance(); 
     sunday.add(Calendar.DAY_OF_YEAR, (Calendar.SUNDAY - sunday.get(Calendar.DAY_OF_WEEK) + 7 + i)); 
     // saturday = Calendar.getInstance(); 
     // saturday.add(Calendar.DAY_OF_YEAR, (Calendar.SATURDAY - saturday.get(Calendar.DAY_OF_WEEK) + i)); 
     // weekends.add(saturday); 
     weekends.add(sunday); 
    } 
    Calendar[] disabledDays = weekends.toArray(new Calendar[weekends.size()]); 
    dpd.setDisabledDays(disabledDays); 

このコードは、次の5回の日曜日を無効にします。土曜日も無効にしたい場合は、その行のコメントを外してください。

あなたは、前の5つの日曜日のためにそれをしたい場合は、単ににforループを変更しますので、ループのためのこの第二は、前の5回の日曜日を無効にするために使用されます

for (int i = 0; i < (weeks * 7); i = i + 7) { 
    for(int j =0; j > (weeks*7) ; j = j - 7); 
    sunday = Calendar.getInstance(); 
    sunday.add(Calendar.DAY_OF_YEAR, (Calendar.SUNDAY - sunday.get(Calendar.DAY_OF_WEEK) + 7 + i)); 
     // saturday = Calendar.getInstance(); 
     // saturday.add(Calendar.DAY_OF_YEAR, (Calendar.SATURDAY - saturday.get(Calendar.DAY_OF_WEEK) + i)); 
     // weekends.add(saturday); 
     weekends.add(sunday); 
    } 

+0

こんにちは、 ここから私たちはsetDisabledDaysを取得します。 Plsは説明する –

0

私は私はあなたがdisabledDays.add(Calendar.MONDAY)のようなカレンダー日追加無効日間で、より弾力方法 を作成したシャビ・デル・パラシオの回答に基づいて、私の日曜日

  List<Calendar> dayslist= new LinkedList<Calendar>(); 
      Calendar[] daysArray; 
      Calendar cAux = Calendar.getInstance(); 
      while (cAux.getTimeInMillis() <= gc.getTimeInMillis()) { 
       if (cAux.get(Calendar.DAY_OF_WEEK) != 1) { 
        Calendar c = Calendar.getInstance(); 
        c.setTimeInMillis(cAux.getTimeInMillis()); 
        dayslist.add(c); 
       } 
       cAux.setTimeInMillis(cAux.getTimeInMillis() + (24*60*60*1000)); 
      } 
      daysArray = new Calendar[dayslist.size()]; 
      for (int i = 0; i<daysArray.length;i++) 
      { 
       daysArray[i]=dayslist.get(i); 
      } 
      datePickerDialog.setSelectableDays(daysArray); 
0

その無効にこのコードを試してみました答えに遅刻するかもしれません

Javaの代わりにkotlinを使用して申し訳ありませんが、このメソッドを再利用して簡単に使用できるようにする方法を考えたかった

private fun disableDatesFor4Weeks(disabledDays: ArrayList<Int>) { 
     val disabledDaysInWeeks = ArrayList<Calendar>() 
     disabledDays.forEach { 
      dayInt -> 
      var day: Calendar 

      val weeks = 4 

      var week = 0 
      var i = 0 

      while (week < weeks * 7) { 
       day = Calendar.getInstance() 
       day.add(Calendar.DAY_OF_YEAR, dayInt - day.get(Calendar.DAY_OF_WEEK) + 7 * i) 
       disabledDaysInWeeks.add(day) 
       i += 1 
       week += 7 
      } 
     } 

     if (disabledDaysInWeeks.size > 0) { 
      val disabledDaysInWeeksTypedArray = disabledDaysInWeeks.toTypedArray() 
      datePickerDialog!!.maxDate = disabledDaysInWeeksTypedArray.last() 
      datePickerDialog!!.disabledDays = disabledDaysInWeeksTypedArray 
     } 
    } 
関連する問題