Time Picker не показывает время в 12-часовом формате в формах Xamarin - PullRequest
0 голосов
/ 29 августа 2018

У меня есть требование, согласно которому я должен изменить все средства выбора времени и выбранные форматы времени на 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 часов, но впервые он берет настройку формата времени устройства.

1 Ответ

0 голосов
/ 29 августа 2018

Предполагается, что is24HourView ..

https://developer.xamarin.com/api/member/Android.Widget.TimePicker.SetIs24HourView/p/Java.Lang.Boolean/

У вас есть что покрыто?

--- редактировать, ну .. ---

Два часа, один в 12-часовом формате, показывающий в настоящее время 0:24.

<TimePicker x:Name="TimePicker12">
     <TimePicker.Format>hh:mm tt</TimePicker.Format>
</TimePicker>

Еще один в течение 24 часов, оба на той же странице, этот показывает 00: 24.

<TimePicker x:Name="TimePicker24">
     <TimePicker.Format>HH:mm</TimePicker.Format>
</TimePicker>

Код-за:

TimePicker12.Time = TimeSpan.FromMinutes(DateTime.Now.Minute);
TimePicker24.Time = TimeSpan.FromMinutes(DateTime.Now.Minute);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...