首页 > 解决方案 > 使用 DatePickerDialog 的手动输入模式

问题描述

根据谷歌的说法,在向用户查询他们的出生日期或查询不需要日历视图的日期时,我应该使用手动输入模式Xamarin.Android,但我找不到任何在. 我已经尝试过分别设置DatePicker.DatePicker.CalendarViewShownDatePicker.DatePicker.SpinnersShown关闭和打开,但两者都被标记为已弃用并且不起作用。

标签: c#xamarin.androidandroid-datepicker

解决方案


您可以定义一个包含DialogFragment. 我创建了一个简单的演示来模拟该功能。

主要代码是:

类 DatePickerDialogFragment

public class DatePickerDialogFragment: DialogFragment
{
    private readonly Context _context;
    private DateTime _date;
    private readonly DatePickerDialog.IOnDateSetListener _listener;
    public DatePickerDialogFragment(Context context, DateTime date, DatePickerDialog.IOnDateSetListener listener)
    {
        _context = context;
        _date = date;
        _listener = listener;
    }
    public override Dialog OnCreateDialog(Bundle savedState)
    {
        var dialog = new DatePickerDialog(_context, _listener, _date.Year, _date.Month - 1, _date.Day);
        return dialog;
    }
}

activity_main.axml

<EditText android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/editTextCalender"
          android:hint="Enter date"
/>

MainActivity.cs

public class MainActivity : AppCompatActivity, 
Android.App.DatePickerDialog.IOnDateSetListener
{
    private EditText editCalender;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);
        editCalender = FindViewById<EditText>(Resource.Id.editTextCalender);
        editCalender.Click += DateSelect_OnClick;
    }

    private void DateSelect_OnClick(object sender, EventArgs e)
    {
        var dialog = new DatePickerDialogFragment(this, DateTime.Now, this);
        dialog.Show(FragmentManager, "date");
    }

    public void OnDateSet(DatePicker view, int year, int month, int dayOfMonth)
    {
        var date = new DateTime(year, month + 1, dayOfMonth);
        editCalender.Text = date.ToString("MM/dd/yyyy");
    }
}

更新: 然后您可以使用Regular Expressions来匹配输入日期字符串。

例如:

  string date = edit.Text.Trim().ToString();
  string pattern = "^(?<year>\\d{2,4})/(?<month>\\d{1,2})/(?<day>\\d{1,2})$"; //yyyy/MM/dd

  bool match = false;
  match = Regex.IsMatch(date, pattern);

  if (!match)
   {
     edit.Text = "";
     Toast.MakeText(this, "The input format is incorrect.", ToastLength.Short).Show();
     }
     else
     {
      Toast.MakeText(this, "The input format is correct.", ToastLength.Short).Show();
     }

推荐阅读