在MaterialDateTimePicker中禁用每个月的星期日

Som*_*Pal 3 android android-datepicker

我正在使用MaterialDateTimePicker.我想禁用每个月的特定工作日(如星期日).它在这篇文章中提到我们可以使用这个库来做到这一点,但how to disable particular weekdays?我当然可以使用可用的短代码来限制月数,但我不想限制几个月的数量,只是从选择中禁用工作日.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 13

这个答案可能有点迟到但我有一个可以帮助别人的解决方案.请尝试以下方法:

    // 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);
Run Code Online (Sandbox Code Playgroud)

此代码禁用接下来的5个星期日,如果您希望长时间执行此操作,只需要修改一周.如果您也希望禁用星期六,请取消注释这些行.

如果你想在之前的5个星期日做,那么只需将for循环修改为:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

所以这第二个for循环将用于禁用前5个星期日.