using System; using System.Text; namespace Shared.Phone.UserCenter { /// /// 显示一个信息框 /// public class ShowMsgControl { #region ■ 变量声明___________________________ /// /// 点击确认的事件 /// public Action ConfirmClickEvent = null; /// /// 点击取消的事件 /// public Action CancelClickEvent = null; /// /// 点击背景是否关闭弹窗 /// public bool CloseByClickBack = true; /// /// 信息类型 /// private ShowMsgType msgType = ShowMsgType.Confirm; /// /// 消息 /// private string msgText = string.Empty; /// /// 确认按钮的文本 /// private string buttonOkText = null; /// /// 取消按钮的文本 /// private string buttonCancelText = null; /// /// 提示控件 /// private Tip myTip = null; /// /// 等待时间 /// private int WaitTime = -1; #endregion #region ■ 初始化_____________________________ /// /// 显示一个需要确认的信息框 /// /// 信息类型 /// 信息 /// 确认按钮的文本 /// 取消按钮的文本 /// 等待时间,单位为秒,设置确认按钮在多长时间后才能够点击 public ShowMsgControl(ShowMsgType i_msgType, string i_msg, string i_buttonOkText = null, string i_buttonCancelText = null, int i_waitTime = -1) { //确认按钮文本 this.buttonOkText = i_buttonOkText == null ? Language.StringByID(R.MyInternationalizationString.OkMsg) : i_buttonOkText; this.buttonCancelText = i_buttonCancelText == null ? Language.StringByID(R.MyInternationalizationString.uCancel) : i_buttonCancelText; this.msgType = i_msgType; this.msgText = i_msg; this.WaitTime = i_waitTime; if (i_msgType == ShowMsgType.Tip) { myTip = new Tip(); myTip.Direction = AMPopTipDirection.None; myTip.CloseTime = 2; myTip.Text = i_msg; } } #endregion #region ■ 显示消息___________________________ /// /// 显示 /// public void Show() { try { if (myTip != null) { myTip.Show(Common.CommonPage.Instance); myTip = null; return; } //初始化控件 this.InitMsgControl(); } catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); } } #endregion #region ■ 初始化控件_________________________ /// /// 初始化控件 /// private void InitMsgControl() { //主控件 var frameMain = new NormalFrameLayout(); frameMain.MainKey = "ShowMsg"; frameMain.BackgroundColor = UserCenterColor.Current.DialogBackColor; Common.CommonPage.Instance.AddChidren(frameMain); frameMain.MouseUpEventHandler += (sender, e) => { if (this.CloseByClickBack == true) { //移除界面 frameMain.RemoveFromParent(); this.ConfirmClickEvent = null; } }; //白色背景框 var frameBack = new FrameLayout(); frameBack.Height = Application.GetRealHeight(478); frameBack.Width = Application.GetRealWidth(792); frameBack.BackgroundColor = UserCenterColor.Current.White; frameBack.Y = Application.GetRealHeight(706); frameBack.Gravity = Gravity.CenterHorizontal; frameBack.Radius = (uint)Application.GetRealHeight(17); frameMain.AddChidren(frameBack); //标题 var btnTitle = new NormalViewControl(frameBack.Width, Application.GetRealHeight(65), false); btnTitle.Y = Application.GetRealHeight(68); btnTitle.TextColor = 0xff333443; btnTitle.TextAlignment = TextAlignment.Center; btnTitle.TextSize = 16; frameBack.AddChidren(btnTitle); if (msgType == ShowMsgType.Normal) { btnTitle.TextID = R.MyInternationalizationString.NormalTip; } else if (msgType == ShowMsgType.Error) { btnTitle.TextID = R.MyInternationalizationString.ErrorTip; } else if (msgType == ShowMsgType.Confirm) { btnTitle.TextID = R.MyInternationalizationString.NormalTip; } else if (msgType == ShowMsgType.Remind) { btnTitle.TextID = R.MyInternationalizationString.uRemind; } //消息 var btnMsg = new NormalViewControl(frameBack.Width - Application.GetRealWidth(55 * 2), Application.GetRealHeight(180), false); btnMsg.Y = Application.GetRealHeight(141); btnMsg.IsMoreLines = true; btnMsg.TextAlignment = TextAlignment.Center; btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1; btnMsg.Gravity = Gravity.CenterHorizontal; btnMsg.Text = msgText; frameBack.AddChidren(btnMsg); if (msgType == ShowMsgType.Confirm) { //初始化确认类型的底部按钮 this.InitBottomConfirmButton(frameMain, frameBack); } else { //初始化普通类型的底部按钮 this.InitBottomNormalButton(frameMain, frameBack); } } /// /// 初始化确认类型的底部按钮 /// /// /// private void InitBottomConfirmButton(NormalFrameLayout frameMain, FrameLayout frameBack) { //取消按钮 var btnCancel = new BottomLeftClickButton(Application.GetRealWidth(396), Application.GetRealHeight(127)); frameBack.AddChidren(btnCancel); btnCancel.InitControl(this.buttonCancelText); btnCancel.ButtonClickEvent += (sender, e) => { //移除界面 frameMain.RemoveFromParent(); //回调函数 this.CancelClickEvent?.Invoke(); this.ConfirmClickEvent = null; this.CancelClickEvent = null; }; //确定按钮 var btnConfirm = new BottomRightClickButton(frameBack.Width - btnCancel.Width, btnCancel.Height); frameBack.AddChidren(btnConfirm); btnConfirm.InitControl(this.buttonOkText); btnConfirm.ButtonClickEvent += (sender, e) => { //移除界面 frameMain.RemoveFromParent(); //回调函数 this.ConfirmClickEvent?.Invoke(); this.ConfirmClickEvent = null; this.CancelClickEvent = null; }; //开启等待时间 this.StartWaitTime(btnConfirm); } /// /// 初始化普通类型的底部按钮 /// /// /// private void InitBottomNormalButton(NormalFrameLayout frameMain, FrameLayout frameBack) { #if Android //确认 var frameConfirm = new FrameLayoutStatuControl(); frameConfirm.Height = Application.GetRealHeight(127); frameConfirm.Width = frameBack.Width; frameConfirm.Gravity = Gravity.BottomCenter; frameConfirm.RadiusEx = 17; frameConfirm.BackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; frameBack.AddChidren(frameConfirm); //把上圆角覆盖为方角 var btnTopTemp2 = new NormalViewControl(frameConfirm.Width, Application.GetRealHeight(35), false); btnTopTemp2.BackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; frameConfirm.AddChidren(btnTopTemp2, ChidrenBindMode.BindEvent); //确认按钮 var btnConfirm = new NormalViewControl(frameConfirm.Width - Application.GetRealWidth(10), Application.GetRealHeight(60), false); btnConfirm.Gravity = Gravity.Center; btnConfirm.TextColor = UserCenterColor.Current.White; btnConfirm.Text = buttonOkText; btnConfirm.TextAlignment = TextAlignment.Center; frameConfirm.AddChidren(btnConfirm, ChidrenBindMode.BindEvent); frameConfirm.ButtonClickEvent += (sender, e) => { //移除界面 frameMain.RemoveFromParent(); //回调函数 this.ConfirmClickEvent?.Invoke(); this.ConfirmClickEvent = null; }; //重写控件点击状态 frameConfirm.SelectStatuEvent += (statu) => { if (statu == true) { frameConfirm.BackgroundColor = UserCenterColor.Current.ButtonClickStatuColor; btnTopTemp2.BackgroundColor = UserCenterColor.Current.ButtonClickStatuColor; btnConfirm.BackgroundColor = UserCenterColor.Current.ButtonClickStatuColor; } else { frameConfirm.BackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; btnTopTemp2.BackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; btnConfirm.BackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; } }; #endif #if iOS //确认按钮 var btnConfirm = new NormalClickButton(frameBack.Width, Application.GetRealHeight(127), false); btnConfirm.Gravity = Gravity.BottomCenter; btnConfirm.TextColor = UserCenterColor.Current.White; btnConfirm.Text = buttonOkText; btnConfirm.TextAlignment = TextAlignment.Center; btnConfirm.BackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; btnConfirm.oldBackgroundColor = UserCenterColor.Current.ClickButtonDefultColor; frameBack.AddChidren(btnConfirm); btnConfirm.ButtonClickEvent += (sender, e) => { //移除界面 frameMain.RemoveFromParent(); //回调函数 this.ConfirmClickEvent?.Invoke(); this.ConfirmClickEvent = null; }; #endif //开启等待时间 this.StartWaitTime(btnConfirm); } #endregion #region ■ 开启等待时间_______________________ /// /// 开启等待时间(此函数只用于安卓) /// /// 确认按钮 private void StartWaitTime(BottomRightClickButton btnConfirm) { if (this.WaitTime <= 0) { return; } btnConfirm.CanClick = false; HdlThreadLogic.Current.RunThread(() => { //显示剩余等待时间 while (btnConfirm.Parent != null && this.WaitTime >= 0) { HdlThreadLogic.Current.RunMain(() => { btnConfirm.SetButtonText(this.buttonOkText + "(" + this.WaitTime + ")"); }, ShowErrorMode.NO); System.Threading.Thread.Sleep(1000); this.WaitTime--; } HdlThreadLogic.Current.RunMain(() => { //可以点击 btnConfirm.SetButtonText(this.buttonOkText); btnConfirm.CanClick = true; }, ShowErrorMode.NO); }); } /// /// 开启等待时间 /// /// 确认按钮 private void StartWaitTime(ButtonBase btnConfirm) { if (this.WaitTime <= 0) { return; } #if Android ((FrameLayoutStatuControl)btnConfirm.Parent).CanClick = false; #endif #if iOS btnConfirm.CanClick = false; #endif HdlThreadLogic.Current.RunThread(() => { //显示剩余等待时间 while (btnConfirm.Parent != null && this.WaitTime >= 0) { HdlThreadLogic.Current.RunMain(() => { btnConfirm.Text = this.buttonOkText + "(" + this.WaitTime + ")"; }, ShowErrorMode.NO); System.Threading.Thread.Sleep(1000); this.WaitTime--; } HdlThreadLogic.Current.RunMain(() => { //可以点击 btnConfirm.Text = this.buttonOkText; #if Android ((FrameLayoutStatuControl)btnConfirm.Parent).CanClick = true; #endif #if iOS btnConfirm.CanClick = true; #endif }, ShowErrorMode.NO); }); } #endregion #region ■ 关闭弹窗(外部调用)_________________ /// /// 关闭全部的弹窗 /// public static void CloseAllMsgDialog() { while (true) { var myView = Common.CommonPage.Instance.GetChildren(Common.CommonPage.Instance.ChildrenCount - 1); if (myView == null) { return; } if (myView is NormalFrameLayout) { if (((NormalFrameLayout)myView).MainKey != "ShowMsg") { return; } //移除 myView.RemoveFromParent(); continue; } return; } } #endregion } }