少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述Xamarin.Forms Android DatePicker / TimePicker按钮侦听器相关的知识,希望能为你提供帮助。
【Xamarin.Forms Android DatePicker / TimePicker按钮侦听器】我需要知道用户是否点击取消或确定按钮在xamarin.Forms
android应用程序的日期/时间选择器中。
我已经尝试将功能添加到Click事件,但从未触发过。
这是我的代码(类似于TimePicker):
using Android.Content;
using MyApp.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using MyApp.Models;
using java.Util;
[assembly: ExportRenderer(typeof(DatePicker), typeof(DatePickerCustomRenderer))]namespace MyApp.Droid {
public class DatePickerCustomRenderer : DatePickerRenderer {public DatePickerCustomRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<
DatePicker>
e) {
base.OnElementChanged(e);
Locale locale = new Locale(Utente.FormatoPerDateTimePicker);
Control.TextLocale = locale;
Control.Click += Control_Click;
}private void Control_Click(object sender, System.EventArgs e) {
// This function is never called :(
throw new System.NotImplementedException();
}
}
}
我该怎么做?
答案
[我需要知道用户是否在xamarin.Forms Android应用程序的日期/时间选择器中点击“取消”或“确定”按钮。使用Xamarin.Form的
DatePicker
,您不能这样做。 Xamarin.Forms.DatePicker
渲染到EditText
控件中。不幸的是弹出窗口DatePickerDialog
并未对用户公开。您可以从Source Codes of DatePickerRenderer看到它。因此,如果您确实要检测确定/取消按钮的单击事件。您需要根据源代码实现自己的DatePickerRenderer。
另一答案使用以下Android DatePicker自定义渲染器,您可以完全控制OK和CANCEL。
using Android.App;
using Android.Content;
using ???.Android.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using DatePicker = Android.Widget.DatePicker;
[assembly: ExportRenderer(typeof(DatePicker), typeof(FixedDatePickerRenderer))]
namespace ???.Android.Renderers
{
public class FixedDatePickerRenderer : Xamarin.Forms.Platform.Android.DatePickerRenderer
{
public FixedDatePickerRenderer(Context context) : base(context)
{
}protected override void OnElementChanged(ElementChangedEventArgs<
Xamarin.Forms.DatePicker>
e)
{
base.OnElementChanged(e);
//Disposing
if (e.OldElement != null)
{
_element = null;
}//Creating
if (e.NewElement != null)
{
_element = e.NewElement;
}
}protected Xamarin.Forms.DatePicker _element;
protected override DatePickerDialog CreateDatePickerDialog(int year, int month, int day)
{
var dialog = new DatePickerDialog(Context, (o, e) =>
{
_element.Date = e.Date;
((IElementController)_element).SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false);
}, year, month, day);
dialog.SetButton((int)DialogButtonType.Positive, Context.Resources.GetString(global::Android.Resource.String.Ok), OnOk);
dialog.SetButton((int)DialogButtonType.Negative, Context.Resources.GetString(global::Android.Resource.String.Cancel), OnCancel);
return dialog;
}private void OnCancel(object sender, DialogClickEventArgs e)
{
_element.Unfocus();
//((FixedDatePicker) _element)?.CallOnCancel();
}
private void OnOk(object sender, DialogClickEventArgs e)
{
//need to set date from native control manually now
_element.Date = ((DatePickerDialog)sender).DatePicker.DateTime;
_element.Unfocus();
//((FixedDatePicker)_element)?.CallOnOk();
}}}
仅对于寻求避免搜索ios的完整解决方案的人们,现成的选项已经包含:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/ios/datepicker-selection
推荐阅读
- Xamarin表示Android导航栏向下移动
- 在Xamarin android中从右向左滑动抽屉
- 如何更改Android中选项卡页面标题的选定和未选定颜色(Xamarin Forms)
- 深度纯净版win7系统完全清除木马病毒的攻略
- ie浏览器8 win7系统免受不良网站影响的设置技巧
- win7系统怎样显示桌面图标迟钝?
- win7系统网卡禁用 打开win7系统网卡的办法
- win7系统下ie8总弹出计算机有风险的应对技巧
- win7系统运行快捷键Win+R的妙用