Materialdatepicker Not Working On Android
Solution 1:
With the Material Components for Android you can use the new MaterialDatePicker
.
To work fine, in your app you have to use a Material Components Theme. In this way you inherit the style and theme for the pickers.
To select a single date just use:
MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
builder.setTitleText(R.string.your_text);
MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
To select a range date you can use a DateRange Picker using:
MaterialDatePicker.Builder<Pair<Long, Long>> builder =MaterialDatePicker.Builder.dateRangePicker();
CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();
builder.setCalendarConstraints(constraintsBuilder.build());
MaterialDatePicker<?> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
Check the colors used in your theme.
These attributes define your style. You don't need to add them, they are provided by default with the Material Components theme.
<!-- Picker styles and themes. --><itemname="materialCalendarStyle">@style/Widget.MaterialComponents.MaterialCalendar</item><itemname="materialCalendarFullscreenTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar.Fullscreen</item><itemname="materialCalendarTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar</item>
Based on these style, the colors used by the picker are:
HeaderLaoyout -> background:colorPrimary, textColor:colorOnPrimary
HeaderSelection -> background:colorPrimary, textColor:colorOnPrimary
ConfirmButtons -> background:colorPrimary, textColor:colorOnPrimary
Buttons -> background:colorPrimary, textColor:colorOnSurface
HeaderToggleButton-> textColor:colorOnPrimary
Day -> text:colorOnSurface stroke:colorOnSurface
SelectedDay -> background:colorPrimary, textColor:colorOnPrimary
RangeFillColor -> background:colorPrimary
Solution 2:
The problem was in the colorPrimary.
The default color of my project to colorPrimary was "white" and the Material Date Picker style uses that colorPrimary to color the background and the text of the buttons. Since the color of the header text was also white, it appear that there was nothing there when there was everything.
I solved it by importing the styles file to my project and making some adjustments to the styles in my project.
Thank you all for your answers, all of them helped in finding the problem!
Solution 3:
I had the same issue with my primary color being white.
The simple solution is to override the primaryColor
in the Calendar style:
Base Theme:
<stylename="Base.Theme.YV.Bible"parent="Theme.MaterialComponents.DayNight.NoActionBar"><itemname="materialCalendarStyle">@style/Theme.YV.Bible.DatePicker</item><itemname="android:datePickerDialogTheme">@style/Theme.YV.Bible.DatePicker</item></style>
Calendar / Datepicker Theme
<stylename="Theme.YV.Bible.DatePicker"parent="ThemeOverlay.MaterialComponents.MaterialCalendar"><itemname="colorPrimary">?colorPrimaryDark</item> // this is the key, we need to use a dark color instead of our theme's primary color
</style>
Usage
val picker = MaterialDatePicker.Builder
.datePicker()
.setCalendarConstraints(CalendarConstraints.Builder().setStart(now().time).build())
.setSelection(c.timeInMillis)
.setTheme(com.bible.base.R.style.Theme_YV_Bible_DatePicker)
.build()
picker.show(fragmentManager, null)
Solution 4:
For getting your desired output, make sure to add this before calling show()
:
builder.setTitleTextResId(R.string.your_text);
// Where R.string.your_text must be equal to "Selected Date"or whatever you want
For Material DatePicker specifically, you need to first implement the latest library
implementation 'com.google.android.material:material:1.1.0-alpha09'
Then
MaterialDatePicker.Builder<Long> builder =
MaterialDatePicker.Builder.datePicker();
builder.setTitleTextResId(R.string.your_text);
MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
You can also simply show the DatePickerDialog instead of using Builder. The Dialog is For showing dialog and getting selected data:
EditText date;
DatePickerDialog datePickerDialog;
// Calendar object to hold the selected data
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR); // current yearint mMonth = c.get(Calendar.MONTH); // current monthint mDay = c.get(Calendar.DAY_OF_MONTH); // current day// date picker dialog
datePickerDialog = new DatePickerDialog(MainActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
publicvoidonDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
// set day of month , month and year value in the edit text
date.setText(dayOfMonth + "/"
+ (monthOfYear + 1) + "/" + year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
Solution 5:
Add latest dependency:
implementation 'com.google.android.material:material:1.1.0-alpha10'
MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
builder.setTitleTextResId(R.string.your_text);// here is the title for your datepicker
MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
Other options: https://github.com/wdullaer/MaterialDateTimePicker
Post a Comment for "Materialdatepicker Not Working On Android"