У меня есть требование, согласно которому я должен изменить все средства выбора времени и выбранные форматы времени на 12 часов независимо от формата времени устройства.
Эта проблема характерна для Android. Это нормально работает в iOS.
Я использую пользовательское время рендерера для обоих.
Вот что я делаю:
В XAML:
<customElements:CustomTimePicker x:Name="TimePickerName" Time="{Binding time}">
<StackLayout>
<StackLayout.GestureRecognizers>
<TapGestureRecognizer Tapped="Handle_TimePickerTapped" />
</StackLayout.GestureRecognizers>
</StackLayout>
<TimePicker.Format>hh:mm tt</TimePicker.Format>
В Xaml.cs:
void Handle_TimePickerTapped(object sender, System.EventArgs e)
{
Device.BeginInvokeOnMainThread(() =>
{
if(TimePickerName.IsFocused)
{
TimePickerName.Unfocus();
}
if(!TimePickerName.IsFocused)
{
TimePickerName.Focus();
}
TimePickerName.Format = "hh:mm tt";
});
}
В представлении модель: (время выборки текущего элемента из БД)
time = (TimeSpan)DBHelper.GetTime(CurrentItem).TimeOfDay;
В Custom Renderer, т.е. в классе CustomTimePicker:
protected override void OnElementChanged(ElementChangedEventArgs<TimePicker> e)
{
base.OnElementChanged(e);
Control.TextSize = 14;
Control.Text = DateTime.Now.ToString("hh:mm tt");
}
public void OnTimeSet(Android.Widget.TimePicker view, int hourOfDay, int minute)
{
var time = new TimeSpan(hourOfDay, minute, 0);
this.Element.SetValue(Xamarin.Forms.TimePicker.TimeProperty, time);
var dateTime = new DateTime(time.Ticks);
var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
this.Control.Text = formattedTime;
}
Я хочу, чтобы таймер в 12-часовом формате также выбирал время в 12-часовом формате независимо от формата телефона.
Выбор сообщения из-за метода OnTimeSet
Я могу преобразовать его в 12 часов, но впервые он берет настройку формата времени устройства.