c# - 使用 DatePickerDialog 的手动输入模式
问题描述
根据谷歌的说法,在向用户查询他们的出生日期或查询不需要日历视图的日期时,我应该使用手动输入模式Xamarin.Android
,但我找不到任何在. 我已经尝试过分别设置DatePicker.DatePicker.CalendarViewShown
和DatePicker.DatePicker.SpinnersShown
关闭和打开,但两者都被标记为已弃用并且不起作用。
解决方案
您可以定义一个包含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();
}
推荐阅读
- java - 以编程方式为给定类型的每个 bean/configuration/... 创建 spring bean
- asp.net-mvc - html.TextAreaFor 和 HtmlDecode
- flutter - 在 Flutter 的 for 循环中生成的 2 个文本小部件之间画线
- c - C中的函数jalr
- botframework - 非 ngrok 的 MS Teams 机器人端点地址
- python - Selenium Python - 无法选择选项选择框
- pandas - Excel 单元格包含标题及其值,以 : 分隔。想在熊猫中创建数据框创建标题并从单元格中填充其值
- regex - Unexpected Behavior of Regex in Perl with Lookahead/Lookbehind
- python - How to create a row rdd from a list in pyspark
- elasticsearch - Elasticsearch IO slow, duplicate reads with Google Cloud Dataflow