【问题标题】:Android MonoDroid Xamarin TimePickerDialog access to mMinuteSpinner NumberPickerAndroid MonoDroid Xamarin TimePickerDialog 访问 mMinuteSpinner NumberPicker
【发布时间】:2013-11-13 15:19:06
【问题描述】:

我正在尝试将 TimePickerDialog 设置为 10 分钟的间隔,我已经看到了各种看起来应该可以工作的解决方案,但是最优雅的解决方案似乎是从 TimePickerDialog 派生,然后将 NumberPicker 属性覆盖为 00、10 , 20 ... 40 而不是 00, 01, 02 ... 59。

Java 中的解决方案似乎是在派生类的构造函数中获取 NumberPicker 控件并重置它的所有值以显示您想要的内容。 01.sunlit Set TimePickerDialog to use 15 minute intervals

可以在这里找到解决方案

我已尝试在 Xamarin 中实现此解决方案,但无法访问数字选择器对象。

你能告诉我如何在派生类的构造函数中访问这个对象吗?

【问题讨论】:

    标签: android datepicker xamarin.android xamarin datepickerdialog


    【解决方案1】:

    所以我设法让它像这样工作:

    public class TimePickerDialogIntervals : TimePickerDialog
    {
        public const int TimePickerInterval = 10;
        private bool _ignoreEvent = false;
    
        public TimePickerDialogIntervals(Context context, EventHandler<TimePickerDialog.TimeSetEventArgs> callBack, int hourOfDay, int minute, bool is24HourView)
                : base(context, (sender, e) => {
                    callBack (sender, new TimePickerDialog.TimeSetEventArgs (e.HourOfDay, e.Minute * TimePickerInterval));
                }, hourOfDay, minute/TimePickerInterval, is24HourView)
        {
        }
    
        protected TimePickerDialogIntervals(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
        {
        }
    
        public override void SetView(View view)
        {
            SetupMinutePicker (view);
            base.SetView(view);
        }
    
        void SetupMinutePicker (View view)
        {
            var numberPicker = FindMinuteNumberPicker (view as ViewGroup);
            if (numberPicker != null) {
                numberPicker.MinValue = 0;
                numberPicker.MaxValue = 5;
                numberPicker.SetDisplayedValues (new String[] { "00", "10", "20", "30", "40", "50" });
            }
        }
    
        protected override void OnCreate (Android.OS.Bundle savedInstanceState)
        {
            base.OnCreate (savedInstanceState);
            GetButton((int)DialogButtonType.Negative).Visibility = Android.Views.ViewStates.Gone;
            this.SetCanceledOnTouchOutside (false);
    
        }
    
        private NumberPicker FindMinuteNumberPicker(ViewGroup viewGroup)
        {
            for (var i = 0; i < viewGroup.ChildCount; i++)
            {
                var child = viewGroup.GetChildAt(i);
                var numberPicker = child as NumberPicker;
                if (numberPicker != null)
                {
                    if (numberPicker.MaxValue == 59)
                    {
                        return numberPicker;
                    }
                }
    
                var childViewGroup = child as ViewGroup;
                if (childViewGroup != null)
                {
                    var childResult = FindMinuteNumberPicker (childViewGroup);
                    if(childResult !=null)
                        return childResult;
                }
            }
    
            return null;
        }
    }
    

    【讨论】:

    • 很棒的代码,谢谢!奇怪的事情......如果我将间隔设置为 15 分钟,我没有得到“回滚”功能 - 我的意思是,分钟 NumberPicker 只显示 00、15、30 和 45 - 它没有显示45 高于 00,可让您在分钟选择器中继续向后滚动并减少小时...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多