Android 触摸输出侧显示警报取消
我正在用xamarin表单创建一个应用程序。我正在使用“显示警报”显示带有“是/否”按钮的消息。但当用户点击弹出窗口的外部时,它就会靠近。我不想在外部点击时关闭弹出窗口。只有在用户单击“是”或“否”按钮后,它才会关闭 我如何管理我的弹出窗口,使其在用户点击xamarin表单中弹出窗口外部时无法关闭 使用AcrUserDialog可能是另一种选择Android 触摸输出侧显示警报取消,android,xamarin.forms,alert,Android,Xamarin.forms,Alert,我正在用xamarin表单创建一个应用程序。我正在使用“显示警报”显示带有“是/否”按钮的消息。但当用户点击弹出窗口的外部时,它就会靠近。我不想在外部点击时关闭弹出窗口。只有在用户单击“是”或“否”按钮后,它才会关闭 我如何管理我的弹出窗口,使其在用户点击xamarin表单中弹出窗口外部时无法关闭 使用AcrUserDialog可能是另一种选择 这可能有点太晚了,但可能会让遇到这个问题的其他人受益 一旦你知道怎么做,这很容易做到。下面是一个简单的分步指南,应该可以帮助你跑步 在共享项目中创建一
这可能有点太晚了,但可能会让遇到这个问题的其他人受益
一旦你知道怎么做,这很容易做到。下面是一个简单的分步指南,应该可以帮助你跑步
using System;
using System.Collections.Generic;
using System.Linq;
using Xamarin.Forms;
public class CustomYesNoBox
{
public string Text { get; set; }
public string Title { get; set; }
public List<string> Buttons { get; set; }
public CustomYesNoBox(string title, string text, params string[] buttons)
{
Title = title;
Text = text;
Buttons = buttons.ToList();
}
public CustomYesNoBox(string title, string text):this(title, text, "Yes", "No")
{
}
public event EventHandler<CustomYesNoBoxClosedArgs> PopupClosed;
public void OnPopupClosed(CustomYesNoBoxClosedArgs e)
{
var handler = PopupClosed;
if (handler != null)
handler(this, e);
}
public void Show()
{
DependencyService.Get<IYesNoPopupLoader>().ShowPopup(this);
}
}
public class CustomYesNoBoxClosedArgs : EventArgs
{
public string Button { get; set; }
}
public interface IYesNoPopupLoader
{
void ShowPopup(CustomYesNoBox reference);
}
using Android.App;
using Android.Widget;
using <YOUR_NAMESPACE>.Droid.Implementation;
using Xamarin.Forms;
[assembly: Dependency(typeof(YesNoPopupLoader))]
namespace <YOUR_NAMESPACE>.Droid.Implementation
{
public class YesNoPopupLoader : IYesNoPopupLoader
{
public void ShowPopup(CustomYesNoBox popup)
{
var alert = new AlertDialog.Builder(Forms.Context);
var textView = new TextView(Forms.Context) { Text = popup.Text };
alert.SetView(textView);
alert.SetTitle(popup.Title);
var buttons = popup.Buttons;
alert.SetPositiveButton(buttons[0], (senderAlert, args) =>
{
popup.OnPopupClosed(new CustomYesNoBoxClosedArgs
{
Button = buttons[0]
});
});
alert.SetNegativeButton(buttons[1], (senderAlert, args) =>
{
popup.OnPopupClosed(new CustomYesNoBoxClosedArgs
{
Button = buttons[1]
});
});
alert.SetCancelable(false);
alert.Show();
}
}
}
using System;
using System.Linq;
using <YOUR_NAMESPACE>.iOS.Implementation;
using UIKit;
[assembly: Xamarin.Forms.Dependency(typeof(YesNoPopupLoader))]
namespace <YOUR_NAMESPACE>.iOS.Implementation
{
public class YesNoPopupLoader : IYesNoPopupLoader
{
public void ShowPopup(CustomYesNoBox popup)
{
var alert = new UIAlertView
{
Title = popup.Title,
Message = popup.Text
};
foreach (var b in popup.Buttons)
alert.AddButton(b);
alert.Clicked += (s, args) =>
{
popup.OnPopupClosed(new CustomYesNoBoxClosedArgs
{
Button = popup.Buttons.ElementAt(Convert.ToInt32(args.ButtonIndex)),
});
};
alert.Show();
}
}
}
应该是这样。您可以随意创建Xamarin表单不提供的其他自定义消息框(带有下拉菜单、文本输入、进度指示器等),或者自定义消息框的布局 我尝试显示警报,直到用户选择肯定按钮。我别无选择,只能这样做,因为这是一项紧急要求
bool input = await DisplayAlert("Sync", "Press Sync", "Sync", "Cancel");
while (!input) //Enters when clicked outside or (cancel) negative button
{
input = await DisplayAlert("Sync Rules", "Press Sync", "Sync", "Cancel");
}
// Code when Sync is clicked
以后将尝试@Tom建议的方法。您也可以使用xlabs。使用此功能,您可以显示自定义弹出窗口,并且在后台单击时它不会关闭。您可以提供“关闭”按钮或“是”或“否”按钮来执行任务或取消任务。发生这种情况时,您是否可以再次显示它?当用户点击外部时,您会得到什么样的结果?您必须编写一个自定义渲染器,在XFIt中无法做到这一点。这不是很清楚-您是否建议将其作为一个有效的解决方案?@yakobom这不是一个有效的解决方案。这只是一个变通办法。我将使用while循环继续显示警报。
bool input = await DisplayAlert("Sync", "Press Sync", "Sync", "Cancel");
while (!input) //Enters when clicked outside or (cancel) negative button
{
input = await DisplayAlert("Sync Rules", "Press Sync", "Sync", "Cancel");
}
// Code when Sync is clicked