Xamarin Android C#:DatePickerDialog设置及月份显示异常求助
Xamarin Android Fragment中DatePickerDialog常见问题解决
1. 设置DatePickerDialog默认显示当前日期
你的代码里year、month、day三个变量未初始化,导致弹窗打开时显示默认初始值(0)。只需在Fragment初始化阶段给这三个变量赋值当前日期即可,注意Android的DatePicker月份从0开始计数(0=1月,11=12月):
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.Inflate(Resource.Layout.newevent, container, false); this.Dialog.SetCanceledOnTouchOutside(false); // 初始化当前日期 var now = DateTime.Now; year = now.Year; month = now.Month - 1; // Android月份从0开始,需减1 day = now.Day; eventpickdateButton = (Button)view.FindViewById(Resource.Id.eventpickdateButton); eventdatesetText = (TextInputLayout)view.FindViewById(Resource.Id.eventdatesetText); eventpickdateButton.Click += EventpickdateButton_Click; return view; }
2. 限制DatePickerDialog仅显示当前日期及之后的日期
创建DatePickerDialog后,获取其内部的DatePicker组件,设置MinDate为当前时间的毫秒数,即可禁止选择过去的日期:
private void EventpickdateButton_Click(object sender, EventArgs e) { DatePickerDialog datePickerDialog = new DatePickerDialog(this.Activity, this, year, month, day); // 设置最小可选日期为当前时间 datePickerDialog.DatePicker.MinDate = DateTime.Now.Ticks / 10000; // 将Ticks转换为毫秒 datePickerDialog.Show(); }
3. 选中日期后月份显示为0的原因及解决方法
原因
你在OnDateSet方法里虽给this.month赋值了month + 1,但拼接文本时用的是方法参数里的原始month(范围0-11,未加1),所以选择1月时参数month为0,直接显示就是0。
解决方法
拼接文本时使用加1后的this.month,或者直接对参数month做加1处理:
public void OnDateSet(DatePicker view, int year, int month, int dayOfMonth) { this.year = year; this.month = month + 1; this.day = dayOfMonth; // 改为使用this.month,或者直接写month + 1 eventdatesetText.EditText.Text = $"{this.month}/{dayOfMonth}/{year}"; }
内容的提问来源于stack exchange,提问作者Zeno
相关产品推荐
相关产品推荐

