我使用MaterialDatePicker的是 Android (Kotlin),需要确保开始日期和结束日期相距不超过 180 天。我该如何编写这个约束?
android android-datepicker kotlin material-components-android
我有3个包含日,月和年值的字符串.例如:
String mday = "02";
String mmonth="07";
String myear="2013";
Run Code Online (Sandbox Code Playgroud)
我需要将活动中的DatePicker设置为从上面的日期开始的一个月.我并不是说只是将1加到mmonth值......如果是第31天,我最终会得到一个无效的日期.所以我需要一些方法来增加日期(有效的方式)并设置DatePicker的值.我知道使用Int值设置datePicker是这样的:
DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1);
datepicker.init(iYear, iMonth, iDay, null);
// where iYear,iMonth and iDay are integers
Run Code Online (Sandbox Code Playgroud)
但是如何获得递增DATE的日,月和年的整数值一个月?
那么在第一个值(字符串)和递增日期的最终值(整数)之间我必须做出哪些步骤?
我想我必须使用日历.所以我的代码应该是这样的:
Integer iYear, iMonth, iDay = 0;
String mday = "02";
String mmonth="07";
String myear="2013";
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(myear), Integer.parseInt(mmonth), Integer.parseInt(mday));
cal.add(Calendar.MONTH, 1);
// here I should get the values from cal inside the iYear, iMonth, iDay, but I do not seem to succeed.
DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1);
datepicker.init(iYear, iMonth, …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个自定义日期选择器,其中我需要为其中的数字选择器(日期选择器使用数字选择器)提供自定义颜色,如下所示:

在这个答案的帮助下,我可以看起来像这样:

但正如您所看到的那样,实际日期会以黄色而不是白色显示.而且,我尝试在运行时这样做:
npMonth.setOnValueChangedListener(new OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
EditText et = ((EditText) npMonth.getChildAt(0));
et.setTextColor(getResources().getColor(R.color.gold));
}
});
Run Code Online (Sandbox Code Playgroud)
但仍然没有运气.
如何将中心文本颜色更改为白色并将顶部和底部文本保持为黄色?
我发现DatePicker(Dialog)非常令人困惑......当设置setMinDate()时...显示的日历真的"视觉上禁用"传递日期(使它们变灰)但这些日期仍然可供选择!我想用户阻止这样做.理想的方法是使通过的日期不可点击/不可选.如果不可能,至少要抓住这个事件(哪一个?onDateChanged?,onSelected?...)并保留一条消息并禁用OK按钮,直到用户选择一个有效的日期.
不幸的是,datepicker(对话框)没有onChangedListener(实际上它有但没有setter).所以我得到的唯一事件是按下OK按钮.为时已晚.
这是我的代码
dateTextView = (TextView) view.findViewById(R.id.createOrder_date);
dateTextView.setText(R.string.createOrder_time_now);
dateTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Calendar calendarNow = Calendar.getInstance();
final int yearNow = calendarNow.get(Calendar.YEAR);
final int monthNow = calendarNow.get(Calendar.MONTH);
final int dayNow = calendarNow.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(CreateOrderFragment.this.getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
if (calendar.before(calendarNow)) {
Toast.makeText(CreateOrderFragment.this.getActivity(), getResources().getString(R.string.createOrder_datePicker_selectFutureDate), Toast.LENGTH_SHORT).show();
view.updateDate(yearNow, monthNow, dayNow);
calendar = calendarNow;
}
SimpleDateFormat sdf = …Run Code Online (Sandbox Code Playgroud) android android-datepicker datepickerdialog android-5.0-lollipop
我想在日期上设置限制,以便用户不能选择更多的日期,例如,如果今天是1月1日那么用户不应该选择7个以上的日期,我的意思是他不能选择1月9日.我也希望他不要选择月份和年份.所以我在一周内限制他的任务.
到目前为止我所做的是显示日期选择器片段并在其中设置当前日期.我的主要活动中的代码如下:
etSelectDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePickerFragment = new DatePickerFragment() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Log.d("Date Change", "onDateSet");
Calendar c = Calendar.getInstance();
c.set(year, month, day);
DateFormat df = DateFormat.getDateInstance();
etSelectDate.setText(df.format(c.getTime()));
//nextField.requestFocus(); //moves the focus to something else after dialog is closed
}
};
datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker");
}
});
Run Code Online (Sandbox Code Playgroud)
和日期选择器片段类如下所示:
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current …Run Code Online (Sandbox Code Playgroud) 我使用的默认Android DatePickerDialog包含android.widget.DatePicker.
有人知道如何禁用或使某些日期无法选择吗?
我知道DatePicker允许setMinDate(),setMaxDate()但它不允许在中间禁用特定日期.
例如,在这张照片上想要禁用日期18,26等:
我想在android日期选择器中的特定月份禁用星期日和特定日期
我使用的Datepicker是android datepicker:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1);
calendar.setMinimalDaysInFirstWeek(27);
// calendar.add(Calendar.DAY_OF_MONTH, 1);
//calendar.set(2016,11,23);
// new DatePickerDialog(LoginSuccess.this, listener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
DatePickerDialog dpDialog = new DatePickerDialog(LoginSuccess.this, listener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
// dpDialog.updateDate(2016,11,23);
DatePicker datePicker = dpDialog.getDatePicker();
//datePicker.updateDate(2016,11,23);
// Date newDate = calendar.getTime();
//dpDialog.getDatePicker().setMinDate(newDate.getTime());
//datePicker.init();
if (calendar.get(Calendar.DAY_OF_MONTH)==Calendar.SUNDAY) {
// dpDialog.setTitle("Sorry Sundays wont be accepted");
// dpDialog.setMessage("not selected");
// dpDialog.show();
//datePicker.setBackgroundColor(000000);
Color.parseColor("#000000");
}
else {
long now = System.currentTimeMillis();
datePicker.setFirstDayOfWeek(Calendar.MONDAY);
datePicker.setMinDate(now + (1000 * 60 * 60 * 24 * 1)); …Run Code Online (Sandbox Code Playgroud) 单击时我有一个 EditText,它应该打开 DatePickerDialog。但在某些设备中,它会随机崩溃。在 Crashlytics 中,它显示它在一些 android 版本 8 和一些版本 9 的设备中崩溃。请告诉我我做错了什么。
对于 DatePicker,我正在设置用户可以选择的最小和最大日期。
DatePickerDialog dialog = new DatePickerDialog(mContext, date, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH));
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
inputFormat.setTimeZone(TimeZone.getTimeZone("IST"));
Date date = new Date();
try {
date = inputFormat.parse("2019-01-13T13:00:00Z"); // this is getting from server
} catch (ParseException e) {
e.printStackTrace();
}
Calendar minCal = Calendar.getInstance();
minCal.setTime(date);
dialog.getDatePicker().setMinDate(minCal.getTimeInMillis());
dialog.getDatePicker().setMaxDate(System.currentTimeMillis());
// dialog.getDatePicker().setCalendarViewShown(false);
dialog.show();
Run Code Online (Sandbox Code Playgroud)
这是我收到的崩溃消息。
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.SimpleMonthView.getMonthHeight()' on a null object reference
at android.widget.DayPickerView.onLayout(DayPickerView.java:230) …Run Code Online (Sandbox Code Playgroud) 我有自定义样式的活动,我希望我的活动有一个自定义标题栏,所以我创建了以下样式:
<style name="costum_titlebar">
<item name="android:background">@color/titlebar_background</item>
</style>
<style name="CustomTheme" parent="android:Theme">
<item name="android:windowTitleSize">@dimen/titlebar_size</item>
<item name="android:windowTitleBackgroundStyle">@style/costum_titlebar</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在清单中我使用:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/CustomTheme" >
Run Code Online (Sandbox Code Playgroud)
在我使用的活动中:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
this.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.setting_activity_titlebar);
Run Code Online (Sandbox Code Playgroud)
到目前为止它很好并且工作正常,我有自定义标题栏的活动.
现在我想使用datePickerDialog.问题是对话框看起来很旧:

但我希望它看起来像这样:

我也有这种风格:
<style name="AppBaseTheme" parent="android:Theme.Light">
Run Code Online (Sandbox Code Playgroud)
所以我用它来创建DatePickerDialog,如下所示:
new DatePickerDialog(getActivity(),R.style.AppBaseTheme, this, year, month, day);
Run Code Online (Sandbox Code Playgroud)
但主题不适用.
只是为了测试,我创建了一个默认样式的第二个应用程序,只有一个按钮来打开日期选择器,所以datepicker看起来像我想要的.两个应用都有android:minSdkVersion="8"
我认为问题出在自定义标题栏上,那么我如何才能获得所需风格的自定义标题栏和日期选择器呢?
编辑:
我改变android:minSdkVersion="11"
了
<style name="datePickerTheme" parent="@android:style/Widget.Holo.DatePicker"></style>
和
new DatePickerDialog(getActivity(),R.style.datePickerTheme, this, year, month, day);
但结果仍然是一样的.
我正在构建一个使用DatePickerDialog的应用程序,允许用户选择他们的生日.这是现在加载对话框的代码:
private void selectBirthdate() {
int year, month, day;
if (mBirthDate == null) {
year = DEF_YEAR;
month = DEF_MON;
day = DEF_DAY;
}
else {
year = mBirthDate.get(Calendar.YEAR);
month = mBirthDate.get(Calendar.MONTH);
day = mBirthDate.get(Calendar.DAY_OF_MONTH);
}
new DatePickerDialog(
getActivity(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
mBirthDate = new GregorianCalendar();
mBirthDate.set(Calendar.YEAR, year);
mBirthDate.set(Calendar.MONTH, month);
mBirthDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
if (mTxtBirthDate != null) {
mTxtBirthDate.setText(mBirthDateFormat.format(mBirthDate.getTime()));
}
}
},
year,
month,
day
).show();
}
Run Code Online (Sandbox Code Playgroud)
但是,他们希望能够使用旧式微调器DatePicker,因为在新的日历视图中,用户并不总是可以更改年份.所以我一直在研究这个主题,根据我读过的内容,应该可以使用主题强制DatePickerDialog进入Spinner模式.所以这就是我所做的. …
android android-datepicker android-alertdialog android-styles