使用DatePickerDialog的手动输入模式

时间:2019-09-09 17:19:40

标签: c# xamarin.android android-datepicker

根据Google的说法,在向用户查询其生日或查询不需要日历视图的日期时,我应该使用manual input mode,但我找不到在其中使用任何方法的方式Xamarin.Android。 我已经尝试过将DatePicker.DatePicker.CalendarViewShownDatePicker.DatePicker.SpinnersShown分别设置为关闭和打开,但是两者都被标记为已弃用,无法正常工作。

1 个答案:

答案 0 :(得分:1)

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

主要代码是:

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();
     }