using Shared;
using HDL_ON.UI.CSS;
using System;
using System.Text;
namespace HDL_ON.Stan
{
///
/// 文本输入的弹窗界面(不用加入父控件)
///
public class TextInputDialog
{
#region ■ 变量声明___________________________
///
/// 标题文本
///
private string titleText = string.Empty;
///
/// 初始值
///
private string textValue = string.Empty;
///
/// 当输入框为空白时的提示文本
///
private string emptyMsg = string.Empty;
///
/// 确认按钮的文本
///
private string buttonOkText = string.Empty;
///
/// 取消按钮的文本
///
private string buttonCancelText = string.Empty;
///
/// 是否是密码输入
///
private bool isPassword = false;
#endregion
#region ■ 初始化_____________________________
///
/// 文本输入的弹窗界面(不用加入父控件)
///
/// 标题文本
/// 初始值
/// 当输入框为空白时的提示文本
/// 确认按钮的文本
/// 取消按钮的文本
/// 是否是密码输入
public TextInputDialog(string i_title, string i_text, string i_emptyMsg, string i_buttonOkText = null, string i_buttonCancelText = null, bool i_isPassword = false)
{
this.titleText = i_title;
this.textValue = i_text;
this.emptyMsg = i_emptyMsg;
//确认按钮文本
this.buttonOkText = i_buttonOkText == null ? Language.StringByID(StringId.Confirm) : i_buttonOkText;
this.buttonCancelText = i_buttonCancelText == null ? Language.StringByID(StringId.Cancel) : i_buttonCancelText;
this.isPassword = i_isPassword;
}
#endregion
#region ■ 弹窗显示___________________________
///
/// 弹窗显示
///
/// 回调函数,参数为输入框的值
public void Show(Action finishEvent)
{
var dialogForm = new Dialog();
dialogForm.BackgroundColor = CSS_Color.DialogTransparentColor1;
//主控件
var frameMain = new NormalFrameLayout();
dialogForm.AddChidren(frameMain);
dialogForm.Show();
//中间区域
var frameCenter = new NormalFrameLayout();
frameCenter.Gravity = Gravity.Center;
frameCenter.Width = Application.GetRealWidth(270);
frameCenter.Height = Application.GetRealHeight(50);
frameCenter.BackgroundColor = CSS_Color.MainBackgroundColor;
frameCenter.Radius = (uint)Application.GetMinRealAverage(10);
frameMain.AddChidren(frameCenter);
//标题
var btnTitle = new NormalViewControl(frameCenter.Width - HdlControlResourse.XXLeft * 2, Application.GetRealHeight(24), false);
btnTitle.Y = Application.GetRealHeight(19);
btnTitle.Gravity = Gravity.CenterHorizontal;
btnTitle.TextColor = CSS_Color.MainColor;
btnTitle.TextSize = CSS_FontSize.SubheadingFontSize;
btnTitle.TextAlignment = TextAlignment.Center;
btnTitle.IsBold = true;
btnTitle.Text = this.titleText.Replace("{0}", "\r\n");
btnTitle.Height = Application.GetRealHeight(24) * btnTitle.GetRealRowCountByText();
btnTitle.IsMoreLines = true;
frameCenter.AddChidren(btnTitle);
//输入框的背景
var frameInput = new FrameLayout();
frameInput.Y = btnTitle.Bottom + Application.GetRealHeight(16);
frameInput.Width = Application.GetRealWidth(222);
frameInput.Height = Application.GetRealHeight(40);
frameInput.Gravity = Gravity.CenterHorizontal;
frameInput.Radius = (uint)Application.GetRealWidth(4);
frameInput.BackgroundColor = CSS_Color.BackgroundColor;
frameCenter.AddChidren(frameInput);
//输入框
var txtInput = new TextInputControl(174, 24, true);
txtInput.X = Application.GetRealWidth(12);
txtInput.Gravity = Gravity.CenterVertical;
txtInput.TextColor = CSS_Color.FirstLevelTitleColor;
txtInput.Text = this.textValue;
frameInput.AddChidren(txtInput);
//密码型
if (this.isPassword == true)
{
txtInput.IsNumberKeyboardType = true;
txtInput.SecureTextEntry = true;
//密码可视图标
var btnIcon = new IconViewControl(24);
btnIcon.X = txtInput.Right + Application.GetRealWidth(8);
btnIcon.Gravity = Gravity.CenterVertical;
btnIcon.UnSelectedImagePath = "LoginIcon/HidePasswordIcon.png";
btnIcon.SelectedImagePath = "LoginIcon/ShowPasswordIcon.png";
frameInput.AddChidren(btnIcon);
btnIcon.ButtonClickEvent += (sender, e) =>
{
btnIcon.IsSelected = !btnIcon.IsSelected;
txtInput.SecureTextEntry = !txtInput.SecureTextEntry;
};
}
else
{
//取消图标
var btnIcon = new IconViewControl(24);
btnIcon.X = txtInput.Right + Application.GetRealWidth(8);
btnIcon.Gravity = Gravity.CenterVertical;
btnIcon.UnSelectedImagePath = "LoginIcon/1.png";
frameInput.AddChidren(btnIcon);
btnIcon.ButtonClickEvent += (sender, e) =>
{
txtInput.Text = string.Empty;
};
}
//错误显示消息
var btnErrorMsg = new NormalViewControl(frameInput.Width, Application.GetRealHeight(21), false);
btnErrorMsg.Y = frameInput.Bottom;
btnErrorMsg.Gravity = Gravity.CenterHorizontal;
btnErrorMsg.TextColor = CSS_Color.WarningColor;
btnErrorMsg.Text = this.emptyMsg.Replace("{0}", "\r\n");
btnErrorMsg.IsMoreLines = true;
btnErrorMsg.TextAlignment = TextAlignment.TopLeft;
btnErrorMsg.Height = Application.GetRealHeight(21) * btnErrorMsg.GetRealRowCountByText();
btnErrorMsg.Visible = false;
frameCenter.AddChidren(btnErrorMsg);
//底部按钮的高度
int buttomButtonHeigth = Application.GetRealHeight(43);
//调整白色桌布的高度和坐标
frameCenter.Height = frameInput.Bottom + Application.GetRealHeight(31) + buttomButtonHeigth;
//白色背景在蓝湖上的坐标为264,高度为172 然后让它按这个比例置于桌布
frameCenter.Y = Application.GetRealHeight(264) - (frameCenter.Height - Application.GetRealHeight(172)) / 2;
//取消
var btnCancel = new NormalViewControl(frameCenter.Width / 2, buttomButtonHeigth, false);
btnCancel.Gravity = Gravity.BottomLeft;
btnCancel.TextAlignment = TextAlignment.Center;
btnCancel.TextSize = CSS_FontSize.SubheadingFontSize;
btnCancel.Text = this.buttonCancelText;
frameCenter.AddChidren(btnCancel);
btnCancel.ButtonClickEvent += (sender, e) =>
{
//关闭界面
dialogForm.Close();
finishEvent = null;
};
//线
var btnLine = new NormalViewControl(frameCenter.Width / 2, HdlControlResourse.BottomLineHeight, false);
btnLine.Y = btnCancel.Y - HdlControlResourse.BottomLineHeight;
btnLine.BackgroundColor = CSS_Color.DividingLineColor;
frameCenter.AddChidren(btnLine);
//确认
var btnConfirm = new NormalViewControl(frameCenter.Width - btnCancel.Width, buttomButtonHeigth + HdlControlResourse.BottomLineHeight, false);
btnConfirm.X = btnCancel.Right;
btnConfirm.Y = btnLine.Y;
btnConfirm.TextAlignment = TextAlignment.Center;
btnConfirm.TextSize = CSS_FontSize.SubheadingFontSize;
btnConfirm.TextColor = CSS_Color.MainBackgroundColor;
btnConfirm.BackgroundColor = CSS_Color.MainColor;
btnConfirm.Text = this.buttonOkText;
frameCenter.AddChidren(btnConfirm);
btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), HDLUtils.RectCornerBottomRight);
btnConfirm.ButtonClickEvent += (sender, e) =>
{
string inputValue = txtInput.Text.Trim();
if (inputValue == string.Empty && string.IsNullOrEmpty(this.emptyMsg) != true)
{
//空白的时候,提示消息
btnErrorMsg.Visible = true;
//看看消息显示的控件有没有大于31,大于的话,则算出它增加的宽度(31是输入框到底部按钮Y轴的空白区域)
int value = 0;
if (btnErrorMsg.Height > Application.GetRealHeight(31))
{
//5是与底部按钮Y轴的间距
value = btnErrorMsg.Height - Application.GetRealHeight(31) + Application.GetRealHeight(5);
}
//调整白色桌布的高度和坐标
frameCenter.Height = frameInput.Bottom + Application.GetRealHeight(31) + buttomButtonHeigth + value;
//白色背景在蓝湖上的坐标为264,高度为172 然后让它按这个比例置于桌布
frameCenter.Y = Application.GetRealHeight(264) - (frameCenter.Height - Application.GetRealHeight(172)) / 2;
//两个按钮置底
btnCancel.Gravity = Gravity.BottomLeft;
btnLine.Y = btnCancel.Y - HdlControlResourse.BottomLineHeight;
btnConfirm.Y = btnLine.Y;
return;
}
//关闭界面
dialogForm.Close();
//回调函数
finishEvent?.Invoke(txtInput.Text.Trim());
};
}
#endregion
}
}