static async void OnPagePrompt(Page sender, PromptArguments options) { var promptDialog = new PromptDialog { Title = options.Title ?? string.Empty, Message = options.Message ?? string.Empty, Input = options.InitialValue ?? string.Empty, Placeholder = options.Placeholder ?? string.Empty, MaxLength = options.MaxLength >= 0 ? options.MaxLength : 0, InputScope = options.Keyboard.ToInputScope() }; if (options.Cancel != null) { promptDialog.SecondaryButtonText = options.Cancel; } if (options.Accept != null) { promptDialog.PrimaryButtonText = options.Accept; } var currentAlert = s_currentPrompt; while (currentAlert != null) { await currentAlert; currentAlert = s_currentPrompt; } s_currentPrompt = ShowPrompt(promptDialog); options.SetResult(await s_currentPrompt.ConfigureAwait(false)); s_currentPrompt = null; }
void OnPromptRequested(IView sender, PromptArguments arguments) { // Verify that the page making the request is part of this activity if (!PageIsInThisContext(sender)) { return; } var alertDialog = new DialogBuilder(Activity).Create(); if (alertDialog == null) { return; } alertDialog.SetTitle(arguments.Title); alertDialog.SetMessage(arguments.Message); var frameLayout = new FrameLayout(Activity); var editText = new EditText(Activity) { Hint = arguments.Placeholder, Text = arguments.InitialValue }; var layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent) { LeftMargin = (int)(22 * Activity.Resources.DisplayMetrics.Density), RightMargin = (int)(22 * Activity.Resources.DisplayMetrics.Density) }; editText.LayoutParameters = layoutParams; editText.InputType = arguments.Keyboard.ToInputType(); if (arguments.Keyboard == Keyboard.Numeric) { editText.KeyListener = LocalizedDigitsKeyListener.Create(editText.InputType); } if (arguments.MaxLength > -1) { editText.SetFilters(new IInputFilter[] { new InputFilterLengthFilter(arguments.MaxLength) }); } frameLayout.AddView(editText); alertDialog.SetView(frameLayout); alertDialog.SetButton((int)DialogButtonType.Positive, arguments.Accept, (o, args) => arguments.SetResult(editText.Text)); alertDialog.SetButton((int)DialogButtonType.Negative, arguments.Cancel, (o, args) => arguments.SetResult(null)); alertDialog.SetCancelEvent((o, args) => { arguments.SetResult(null); }); alertDialog.Window.SetSoftInputMode(SoftInput.StateVisible); alertDialog.Show(); editText.RequestFocus(); }
async void OnPromptRequested(Page sender, PromptArguments arguments) { var promptDialog = new PromptDialog { Title = arguments.Title ?? string.Empty, Message = arguments.Message ?? string.Empty, Input = arguments.InitialValue ?? string.Empty, Placeholder = arguments.Placeholder ?? string.Empty, MaxLength = arguments.MaxLength >= 0 ? arguments.MaxLength : 0, // TODO: Implement InputScope property after port the keyboardExtensions }; if (arguments.Cancel != null) { promptDialog.SecondaryButtonText = arguments.Cancel; } if (arguments.Accept != null) { promptDialog.PrimaryButtonText = arguments.Accept; } var currentAlert = CurrentPrompt; while (currentAlert != null) { await currentAlert; currentAlert = CurrentPrompt; } // This is a temporary workaround promptDialog.XamlRoot = Window.Content.XamlRoot; CurrentPrompt = ShowPrompt(promptDialog); arguments.SetResult(await CurrentPrompt.ConfigureAwait(false)); CurrentPrompt = null; }
void PresentPrompt(PromptArguments arguments) { var window = new UIWindow { BackgroundColor = Colors.Transparent.ToUIColor() }; var alert = UIAlertController.Create(arguments.Title, arguments.Message, UIAlertControllerStyle.Alert); alert.AddTextField(uiTextField => { uiTextField.Placeholder = arguments.Placeholder; uiTextField.Text = arguments.InitialValue; uiTextField.ShouldChangeCharacters = (field, range, replacementString) => arguments.MaxLength <= -1 || field.Text.Length + replacementString.Length - range.Length <= arguments.MaxLength; uiTextField.ApplyKeyboard(arguments.Keyboard); }); var oldFrame = alert.View.Frame; alert.View.Frame = new CGRect(oldFrame.X, oldFrame.Y, oldFrame.Width, oldFrame.Height - _alertPadding * 2); alert.AddAction(CreateActionWithWindowHide(arguments.Cancel, UIAlertActionStyle.Cancel, () => arguments.SetResult(null), window)); alert.AddAction(CreateActionWithWindowHide(arguments.Accept, UIAlertActionStyle.Default, () => arguments.SetResult(alert.TextFields[0].Text), window)); PresentPopUp(window, alert); }
void OnPromptRequested(Page sender, PromptArguments args) { // Verify that the page making the request is child of this platform if (!_platform.PageIsChildOfPlatform(sender)) { return; } var prompt = Native.Dialog.CreateDialog(Forms.NativeParent, (args.Accept != null)); prompt.Title = args.Title; var entry = new Entry { MinimumWidthRequest = 200, HorizontalOptions = LayoutOptions.FillAndExpand, BackgroundColor = Color.FromRgb(250, 250, 250), TextColor = Color.Black, Keyboard = args.Keyboard, }; if (!string.IsNullOrEmpty(args.Placeholder)) { entry.Placeholder = args.Placeholder; } if (args.MaxLength > 0) { entry.MaxLength = args.MaxLength; } var layout = new StackLayout { Spacing = 10, Children = { new Label { LineBreakMode = LineBreakMode.CharacterWrap, TextColor = DeviceInfo.Idiom == DeviceIdiom.Watch ? Color.White : Color.Accent, Text = args.Message, HorizontalOptions = LayoutOptions.FillAndExpand, HorizontalTextAlignment = TextAlignment.Center, FontSize = Device.GetNamedSize(NamedSize.Subtitle, typeof(Label)), }, entry, } }; layout.Parent = sender; var layoutrenderer = Platform.GetOrCreateRenderer(layout); var request = layout.Measure(DeviceInfo.Idiom == DeviceIdiom.Watch ? sender.Width * 0.7 : sender.Width, sender.Height); (layoutrenderer as ILayoutRenderer).RegisterOnLayoutUpdated(); layoutrenderer.NativeView.MinimumHeight = Forms.ConvertToScaledPixel(request.Request.Height); layoutrenderer.NativeView.MinimumWidth = Forms.ConvertToScaledPixel(request.Request.Width); prompt.Content = layoutrenderer.NativeView; var cancel = new EButton(prompt) { Text = args.Cancel }; prompt.NegativeButton = cancel; cancel.Clicked += (s, evt) => { args.SetResult(null); prompt.Dismiss(); }; if (args.Accept != null) { var ok = new EButton(prompt) { Text = args.Accept }; prompt.NeutralButton = ok; ok.Clicked += (s, evt) => { args.SetResult(entry.Text); prompt.Dismiss(); }; } entry.Completed += (s, e) => { args.SetResult(entry.Text); prompt.Dismiss(); }; prompt.BackButtonPressed += (s, evt) => { prompt.Dismiss(); }; prompt.Show(); _alerts.Add(prompt); prompt.Dismissed += (s, e) => _alerts.Remove(prompt); }
void PresentPrompt(PromptArguments arguments) { var alert = UIAlertController.Create(arguments.Title, arguments.Message, UIAlertControllerStyle.Alert); alert.AddTextField(uiTextField => { uiTextField.Placeholder = arguments.Placeholder; uiTextField.Text = arguments.InitialValue; uiTextField.ShouldChangeCharacters = (field, range, replacementString) => arguments.MaxLength <= -1 || field.Text.Length + replacementString.Length - range.Length <= arguments.MaxLength; uiTextField.ApplyKeyboard(arguments.Keyboard); }); var oldFrame = alert.View.Frame; alert.View.Frame = new RectF((float)oldFrame.X, (float)oldFrame.Y, (float)oldFrame.Width, (float)oldFrame.Height - AlertPadding * 2); alert.AddAction(UIAlertAction.Create(arguments.Cancel, UIAlertActionStyle.Cancel, _ => arguments.SetResult(null))); alert.AddAction(UIAlertAction.Create(arguments.Accept, UIAlertActionStyle.Default, _ => arguments.SetResult(alert.TextFields[0].Text))); PresentPopUp(Window, alert); }
void OnPromptRequested(Page sender, PromptArguments args) { // Verify that the page making the request is child of this platform if (!PageIsInThisContext(sender)) { return; } var prompt = Dialog.CreateDialog(MauiContext.GetPlatformParent(), (args.Accept != null)); prompt.Title = args.Title; var entry = new Entry { MinimumWidthRequest = 200, HorizontalOptions = LayoutOptions.Fill, BackgroundColor = GColor.FromRgb(250, 250, 250), TextColor = GColor.FromRgb(0, 0, 0), Keyboard = args.Keyboard, }; if (!string.IsNullOrEmpty(args.Placeholder)) { entry.Placeholder = args.Placeholder; } if (args.MaxLength > 0) { entry.MaxLength = args.MaxLength; } var layout = new VerticalStackLayout { Spacing = 10, }; layout.Add(new Label { LineBreakMode = LineBreakMode.CharacterWrap, TextColor = Application.AccentColor, Text = args.Message, HorizontalOptions = LayoutOptions.Fill, HorizontalTextAlignment = TextAlignment.Center, #pragma warning disable CS0612 // Type or member is obsolete FontSize = Device.GetNamedSize(NamedSize.Subtitle, typeof(Label)), #pragma warning disable CS0612 // Type or member is obsolete }); layout.Add(entry); layout.Parent = sender; var nativeView = layout.ToPlatform(MauiContext); var width = sender.Width <= -1 ? double.PositiveInfinity : sender.Width; var height = sender.Height <= -1 ? double.PositiveInfinity : sender.Height; var request = layout.CrossPlatformMeasure(width, height); nativeView.MinimumHeight = request.Height.ToScaledPixel(); nativeView.MinimumWidth = request.Width.ToScaledPixel(); prompt.Content = nativeView; var cancel = new EButton(prompt) { Text = args.Cancel }; prompt.NegativeButton = cancel; cancel.Clicked += (s, evt) => { args.SetResult(null); prompt.Dismiss(); }; if (args.Accept != null) { var ok = new EButton(prompt) { Text = args.Accept }; prompt.NeutralButton = ok; ok.Clicked += (s, evt) => { args.SetResult(entry.Text); prompt.Dismiss(); }; } entry.Completed += (s, e) => { args.SetResult(entry.Text); prompt.Dismiss(); }; prompt.BackButtonPressed += (s, evt) => { prompt.Dismiss(); }; prompt.Show(); _alerts.Add(prompt); prompt.Dismissed += (s, e) => _alerts.Remove(prompt); }