You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:46:09