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