using System;
|
using System.Text;
|
|
namespace Shared.Phone
|
{
|
/// <summary>
|
/// 显示一个信息框
|
/// </summary>
|
public class ShowMsgControl
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 点击确认的事件
|
/// </summary>
|
public Action ConfirmClickEvent = null;
|
/// <summary>
|
/// 点击取消的事件
|
/// </summary>
|
public Action CancelClickEvent = null;
|
/// <summary>
|
/// 点击背景是否关闭弹窗
|
/// </summary>
|
public bool CloseByClickBack = true;
|
/// <summary>
|
/// 信息类型
|
/// </summary>
|
private ShowMsgType msgType = ShowMsgType.Confirm;
|
/// <summary>
|
/// 消息
|
/// </summary>
|
private string msgText = string.Empty;
|
/// <summary>
|
/// 确认按钮的文本
|
/// </summary>
|
private string buttonOkText = null;
|
/// <summary>
|
/// 取消按钮的文本
|
/// </summary>
|
private string buttonCancelText = null;
|
/// <summary>
|
/// 提示控件
|
/// </summary>
|
private Tip myTip = null;
|
/// <summary>
|
/// 等待时间
|
/// </summary>
|
private int WaitTime = -1;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 显示一个需要确认的信息框
|
/// </summary>
|
/// <param name="i_msgType">信息类型</param>
|
/// <param name="i_msg">信息</param>
|
/// <param name="i_buttonOkText">确认按钮的文本</param>
|
/// <param name="i_buttonCancelText">取消按钮的文本</param>
|
/// <param name="i_waitTime">等待时间,单位为秒,设置确认按钮在多长时间后才能够点击</param>
|
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 ■ 显示消息___________________________
|
|
/// <summary>
|
/// 显示
|
/// </summary>
|
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 ■ 初始化控件_________________________
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 初始化确认类型的底部按钮
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
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);
|
}
|
|
/// <summary>
|
/// 初始化普通类型的底部按钮
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
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 ■ 开启等待时间_______________________
|
|
/// <summary>
|
/// 开启等待时间(此函数只用于安卓)
|
/// </summary>
|
/// <param name="btnConfirm">确认按钮</param>
|
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);
|
});
|
}
|
|
/// <summary>
|
/// 开启等待时间
|
/// </summary>
|
/// <param name="btnConfirm">确认按钮</param>
|
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 ■ 关闭弹窗(外部调用)_________________
|
|
/// <summary>
|
/// 关闭全部的弹窗
|
/// </summary>
|
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
|
}
|
}
|