Дополнительные функции средства выбора даты Material Design в Android

Опубликовано: 5 Января, 2022

Как уже говорилось в разделе « Выбор даты материального дизайна» в Android, он предлагает множество функций для пользователей и прост в реализации для разработчиков. Итак, в этой статье мы собираемся обсудить больше функций средства выбора даты в материальном дизайне с примерами. Обратите внимание, что часть пользовательского интерфейса будет такой же, как в статье Part-1 . Мы собираемся работать только с файлом Java.

Функциональность 1. Блокировка всех дат до сегодняшней даты.

Эта функция очень полезна для разработчиков, позволяющих избежать использования пользователями выбор неправильная дата. Ниже приведен образец GIF, чтобы понять, что мы собираемся делать с этой функцией .

Перейдите в файл MainActivity.java и обратитесь к следующему коду. Ниже приведен код файла MainActivity.java. Комментарии добавляются внутри кода для более подробного понимания кода.

Джава

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.datepicker.CalendarConstraints;
import com.google.android.material.datepicker.DateValidatorPointForward;
import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;
public class MainActivity extends AppCompatActivity {
// button to open the material date picker dialog
private Button mPickDateButton;
// textview to preview the selected date
private TextView mShowSelectedDateText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// register all the UI widgets with their
// appropriate IDs
mPickDateButton = findViewById(R.id.pick_date_button);
mShowSelectedDateText = findViewById(R.id.show_selected_date);
// create the calendar constraint builder
CalendarConstraints.Builder calendarConstraintBuilder = new CalendarConstraints.Builder();
// set the validator point forward from june
// this mean the all the dates before the June month
// are blocked
calendarConstraintBuilder.setValidator(DateValidatorPointForward.now());
// instantiate the Material date picker dialog
// builder
final MaterialDatePicker.Builder materialDatePickerBuilder = MaterialDatePicker.Builder.datePicker();
materialDatePickerBuilder.setTitleText( "SELECT A DATE" );
// now pass the constrained calender builder to
// material date picker Calendar constraints
materialDatePickerBuilder.setCalendarConstraints(calendarConstraintBuilder.build());
// now build the material date picker dialog
final MaterialDatePicker materialDatePicker = materialDatePickerBuilder.build();
// handle the Select date button to open the
// material date picker
mPickDateButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// show the material date picker with
// supportable fragment manager to
// interact with dialog material date
// picker dialog fragments
materialDatePicker.show(getSupportFragmentManager(), "MATERIAL_DATE_PICKER" );
}
});
materialDatePicker.addOnPositiveButtonClickListener(
new MaterialPickerOnPositiveButtonClickListener() {
@SuppressLint ( "SetTextI18n" )
@Override
public void onPositiveButtonClick(Object selection) {
// now update the selected date preview
mShowSelectedDateText.setText( "Selected Date is : " + materialDatePicker.getHeaderText());
}
});
}
}

Выход: запустить на эмуляторе

Функциональность 2: выберите сегодняшнюю дату в качестве выбора по умолчанию, как только откроется диалоговое окно выбора даты материала.

Взгляните на следующее изображение.

Перейдите в файл MainActivity.java и обратитесь к следующему коду. Ниже приведен код файла MainActivity.java. Комментарии добавляются внутри кода для более подробного понимания кода.

Джава

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;
public class MainActivity extends AppCompatActivity {
// button to open the material date picker dialog
private Button mPickDateButton;
// textview to preview the selected date
private TextView mShowSelectedDateText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// register all the UI widgets with their
// appropriate IDs
mPickDateButton = findViewById(R.id.pick_date_button);
mShowSelectedDateText = findViewById(R.id.show_selected_date);
// now create the instance of the regular material
// date picker
MaterialDatePicker.Builder materialDateBuilder = MaterialDatePicker.Builder.datePicker();
// get the today's date from the method
// todayInUtcMilliseconds()
long today = MaterialDatePicker.todayInUtcMilliseconds();
// now define the properties of the
// materialDateBuilder
materialDateBuilder.setTitleText( "SELECT A DATE" );
// now make today's date selected by default as soon
// as the dialog opens
materialDateBuilder.setSelection(today);
// now create the instance of the material date
// picker and build the dialog
final MaterialDatePicker materialDatePicker = materialDateBuilder.build();
// handle select date button which opens the
// material design date picker
mPickDateButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// now show the material date picker
// dialog by passing
// getSupportFragmentmanager()
materialDatePicker.show(getSupportFragmentManager(), "MATERIAL_DATE_PICKER" );
}
});
// now handle the positive button click from the
// material design date picker
materialDatePicker.addOnPositiveButtonClickListener(
new MaterialPickerOnPositiveButtonClickListener() {
@SuppressLint ( "SetTextI18n" )
@Override
public void onPositiveButtonClick(Object selection) {
// now update selected date preview text
mShowSelectedDateText.setText( "Selected Date is : " + materialDatePicker.getHeaderText());
}
});
}
}

Выход: запустить на эмуляторе

Функциональность 3: Заставьте пользователя выбрать дату в рамках

Например, выберите дату с марта 2020 года по декабрь 2020 года. Ниже приведен образец GIF, чтобы получить представление о том, что мы собираемся делать в этой функции .

Перейдите в файл MainActivity.java и обратитесь к следующему коду. Ниже приведен код файла MainActivity.java. Комментарии добавляются внутри кода для более подробного понимания кода.

Джава

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.datepicker.CalendarConstraints;
import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;
import java.util.Calendar;
import java.util.TimeZone;
public class MainActivity extends AppCompatActivity {
// button to open the material date picker dialog
private Button mPickDateButton;
// textview to preview the selected date
private TextView mShowSelectedDateText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// register all the UI widgets with their
// appropriate IDs
mPickDateButton = findViewById(R.id.pick_date_button);
mShowSelectedDateText = findViewById(R.id.show_selected_date);
// create the instance of the calendar to set the
// bounds
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone( "UTC" ));
// now set the starting bound from current month to
// previous MARCH
calendar.set(Calendar.MONTH, Calendar.MARCH);
long march = calendar.getTimeInMillis();
// now set the ending bound from current month to
// DECEMBER
calendar.set(Calendar.MONTH, Calendar.DECEMBER);
long december = calendar.getTimeInMillis();
// create the instance of the CalendarConstraints
// Builder
CalendarConstraints.Builder calendarConstraintBuilder = new CalendarConstraints.Builder();
// and set the start and end constraints (bounds)
calendarConstraintBuilder.setStart(march);
calendarConstraintBuilder.setEnd(december);
// instantiate the Material date picker dialog
// builder
final MaterialDatePicker.Builder materialDatePickerBuilder = MaterialDatePicker.Builder.datePicker();
materialDatePickerBuilder.setTitleText( "SELECT A DATE" );
// now pass the constrained calender builder to
// material date picker Calendar constraints
materialDatePickerBuilder.setCalendarConstraints(calendarConstraintBuilder.build());
// now build the material date picker dialog
final MaterialDatePicker materialDatePicker = materialDatePickerBuilder.build();
// handle the Select date button to open the
// material date picker
mPickDateButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// show the material date picker with
// supportable fragment manager to
// interact with dialog material date
// picker dialog fragments
materialDatePicker.show(getSupportFragmentManager(), "MATERIAL_DATE_PICKER" );
}
});
materialDatePicker.addOnPositiveButtonClickListener(
new MaterialPickerOnPositiveButtonClickListener() {
@SuppressLint ( "SetTextI18n" )
@Override
public void onPositiveButtonClick(Object selection) {
// now update the selected date preview
mShowSelectedDateText.setText( "Selected Date is : " + materialDatePicker.getHeaderText());
}
});
}
}

Выход: запустить на эмуляторе

Функциональность 4: открытие диалогового окна выбора даты материала в определенном месяце.

Например, откройте диалоговое окно выбора даты материала в августе. Ниже приведен образец GIF, чтобы понять, что мы собираемся делать с этой функцией .

Перейдите в файл MainActivity.java и обратитесь к следующему коду. Ниже приведен код файла MainActivity.java. Комментарии добавляются внутри кода для более подробного понимания кода.

Джава

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.datepicker.CalendarConstraints;
import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;
import java.util.Calendar;
import java.util.TimeZone;
public class MainActivity extends AppCompatActivity {
// button to open the material date picker dialog
private Button mPickDateButton;
// textview to preview the selected date
private TextView mShowSelectedDateText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// register all the UI widgets with their
// appropriate IDs
mPickDateButton = findViewById(R.id.pick_date_button);
mShowSelectedDateText = findViewById(R.id.show_selected_date);
// create the instance of the calendar to set the
// bounds
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone( "UTC" ));
// from calendar object get the AUGUST month
calendar.set(Calendar.MONTH, Calendar.AUGUST);
long august = calendar.getTimeInMillis();
// create the instance of the CalendarConstraints
// Builder
CalendarConstraints.Builder calendarConstraintBuilder = new CalendarConstraints.Builder();
calendarConstraintBuilder.setOpenAt(august);
// instantiate the Material date picker dialog
// builder
final MaterialDatePicker.Builder materialDatePickerBuilder = MaterialDatePicker.Builder.datePicker();
materialDatePickerBuilder.setTitleText( "SELECT A DATE" );
// now pass the constrained calender builder to
// material date picker Calendar constraints
materialDatePickerBuilder.setCalendarConstraints(calendarConstraintBuilder.build());
// now build the material date picker dialog
final MaterialDatePicker materialDatePicker = materialDatePickerBuilder.build();
// handle the Select date button to open the
// material date picker
mPickDateButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// show the material date picker with
// supportable fragment manager to
// interact with dialog material date
// picker dialog fragments
materialDatePicker.show(getSupportFragmentManager(), "MATERIAL_DATE_PICKER" );
}
});
materialDatePicker.addOnPositiveButtonClickListener(
new MaterialPickerOnPositiveButtonClickListener() {
@SuppressLint ( "SetTextI18n" )
@Override
public void onPositiveButtonClick(Object selection) {
// now update the selected date preview
mShowSelectedDateText.setText( "Selected Date is : " + materialDatePicker.getHeaderText());
}
});
}
}

Выход: запустить на эмуляторе

Хотите более динамичную и конкурентную среду для изучения основ Android?
Щелкните здесь, чтобы перейти к уникальному руководству, составленному нашими экспертами с целью мгновенно подготовить вашу отрасль!