社区,
很长一段时间以来,我一直在尝试在Xamarin中禁用TimePicker的正向按钮,直到用户选择一个有效的时间。我想我将不得不使用一个自定义的渲染器来归档它。目前,我正在努力让它在android上运行,但是,因为我必须在IOs上实现它,所以我会非常感激这两个平台的解决方案(到目前为止,我只研究了android解决方案,因为我现在不能在IOs上测试它)。
我现在做的是如何在安卓系统中禁用对话框的正向按钮,但是我在TimePickerRenderer中找不到计时器对话框。我还试着使用这段代码,在那里我可以很容易地禁用正按钮。这里的问题是,一旦用户选择了一个小时,只有分钟是可以改变的。因此,第一次使用计时器时,它看起来很正常,但之后只能更改分钟。
代码:
public class MyTimePickerRenderer : ViewRenderer<Xamarin.Forms.TimePicker, Android.Widget.EditText>, TimePickerDialog.IOnTimeSetListener, IJavaObject, IDisposable
{
private TimePickerDialog dialog = null;
protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
{
base.OnElementChanged(e);
this.SetNativeControl(new Android.Widget.EditText(Forms.Context));
this.Control.Click += Control_Click;
this.Control.Text = DateTime.Now.ToString("HH:mm");
this.Control.KeyListener = null;
this.Control.FocusChange += Control_FocusChange;
}
void Control_FocusChange(object sender, Android.Views.View.FocusChangeEventArgs e)
{
if (e.HasFocus)
ShowTimePicker();
}
void Control_Click(object sender, EventArgs e)
{
ShowTimePicker();
}
private void ShowTimePicker()
{
if (dialog == null)
{
dialog = new TimePickerDialog(Forms.Context, this, DateTime.Now.Hour, DateTime.Now.Minute, true);
dialog.SetOnShowListener(new OnTimeShowListener());
}
dialog.Show();
}
public void OnTimeSet(Android.Widget.TimePicker view, int hourOfDay, int minute)
{
var time = new TimeSpan(hourOfDay, minute, 0);
this.Element.SetValue(TimePicker.TimeProperty, time);
this.Control.Text = time.ToString(@"hh\:mm");
}
}
OnShowListener():
public class OnTimeShowListener : Java.Lang.Object, IDialogInterfaceOnShowListener
{
public void OnShow(IDialogInterface dialog)
{
((TimePickerDialog)dialog).GetButton((int)DialogButtonType.Positive).Enabled = false;
}
}
如果有人能帮助我,我将不胜感激!
致以最好的问候,托比亚斯
发布于 2018-10-10 03:24:21
必须先在对话框中调用Show(),然后才能访问这些按钮,因为它们事先是不可用的。
public void OnShow(IDialogInterface dialog)
{
var timeDialog = (TimePickerDialog)dialog;
timeDialog.Show();
timeDialog.GetButton((int)DialogButtonType.Positive).Enabled = false;
}
https://stackoverflow.com/questions/46605013
复制相似问题