wxr
2021-06-09 ffdeae1a43e1539f9533f93d64089994db6c742b
HDL_ON/UI/UI0-Stan/Form/AppNumPasswordSecurityForm.cs
New file
@@ -0,0 +1,233 @@
using HDL_ON.UI.CSS;
using Shared;
using System;
using System.Collections.Generic;
using System.Text;
namespace HDL_ON.Stan
{
    /// <summary>
    /// App数字密码验证界面
    /// </summary>
    public class AppNumPasswordSecurityForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// <para>Action事件</para>
        /// <para>1:密码输入结束,这个时候,第二个参数为输入的密码</para>
        /// <para>2:点击了底部的消息</para>
        /// </summary>
        public Action<int, string> ActionEvent = null;
        /// <summary>
        /// 图标控件集合
        /// </summary>
        private List<IconViewControl> listIconContr = new List<IconViewControl>();
        /// <summary>
        /// 消息控件
        /// </summary>
        private NormalViewControl btnErrorMsg = null;
        /// <summary>
        /// 一个高度为0的输入框
        /// </summary>
        private EditText txtPassword = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="addTopFrame">是否添加头部Frame</param>
        /// <param name="i_title">标题信息</param>
        /// <param name="i_bottomMsg">底部显示的信息行</param>
        public void ShowForm(bool addTopFrame, string i_title, string i_bottomMsg)
        {
            //不允许左滑
            this.ScrollLeftEnabled = false;
            if (addTopFrame == false)
            {
                //清空头部全部控件
                topFrameLayout.RemoveAll();
                //然后让背景色一体化
                topFrameLayout.BackgroundColor = bodyFrameLayout.BackgroundColor;
                topMenuFrameLayout.BackgroundColor = bodyFrameLayout.BackgroundColor;
            }
            else
            {
                //验证数字密码
                base.SetTitleText(Language.StringByID(StringId.VerifyDigitalPassword));
            }
            //初始化中部信息
            this.InitMiddleFrame(i_title, i_bottomMsg);
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        /// <param name="i_title">标题信息</param>
        /// <param name="i_bottomMsg">底部显示的信息行</param>
        private void InitMiddleFrame(string i_title, string i_bottomMsg)
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            //标题
            var btnTitle = new NormalViewControl(bodyFrameLayout.Width - HdlControlResourse.XXLeft * 2, Application.GetRealHeight(42), false);
            btnTitle.Y = Application.GetRealHeight(228) - topFrameLayout.Bottom;
            btnTitle.Gravity = Gravity.CenterHorizontal;
            btnTitle.TextAlignment = TextAlignment.Center;
            btnTitle.TextColor = CSS_Color.FirstLevelTitleColor;
            btnTitle.TextSize = CSS_FontSize.SubheadingFontSize;
            btnTitle.Text = i_title;
            bodyFrameLayout.AddChidren(btnTitle);
            //第一个圆圈
            var btnIcon1 = this.InitIconControl();
            btnIcon1.X = Application.GetRealWidth(132);
            btnIcon1.Y = btnTitle.Bottom + Application.GetRealWidth(10);
            //第二个圆圈
            var btnIcon2 = this.InitIconControl();
            btnIcon2.X = btnIcon1.Right + Application.GetRealWidth(16);
            btnIcon2.Y = btnIcon1.Y;
            //第三个圆圈
            var btnIcon3 = this.InitIconControl();
            btnIcon3.X = btnIcon2.Right + Application.GetRealWidth(16);
            btnIcon3.Y = btnIcon1.Y;
            //第四个圆圈
            var btnIcon4 = this.InitIconControl();
            btnIcon4.X = btnIcon3.Right + Application.GetRealWidth(16);
            btnIcon4.Y = btnIcon1.Y;
            //错误消息
            this.btnErrorMsg = new NormalViewControl(bodyFrameLayout.Width - HdlControlResourse.XXLeft * 2, Application.GetRealHeight(24), false);
            btnErrorMsg.Y = btnIcon1.Bottom + Application.GetRealHeight(4);
            btnErrorMsg.Gravity = Gravity.CenterHorizontal;
            btnErrorMsg.TextColor = CSS_Color.WarningColor;
            btnErrorMsg.TextAlignment = TextAlignment.Center;
            btnErrorMsg.IsMoreLines = true;
            bodyFrameLayout.AddChidren(btnErrorMsg);
            //底部消息
            if (string.IsNullOrEmpty(i_bottomMsg) == false)
            {
                var btnBottomTip = new NormalViewControl(bodyFrameLayout.Width - HdlControlResourse.XXLeft * 2, 20, false);
                btnBottomTip.Y = Application.GetRealHeight(517) - topFrameLayout.Bottom;
                btnBottomTip.Gravity = Gravity.CenterHorizontal;
                btnBottomTip.TextAlignment = TextAlignment.TopCenter;
                btnBottomTip.TextColor = CSS_Color.MainColor;
                btnBottomTip.Text = i_bottomMsg;
                btnBottomTip.Height = btnBottomTip.GetRealRowCountByText() * Application.GetRealHeight(24);
                btnBottomTip.IsMoreLines = true;
                bodyFrameLayout.AddChidren(btnBottomTip);
                btnBottomTip.ButtonClickEvent += (sender, e) =>
                {
                    this.ActionEvent?.Invoke(2, null);
                };
            }
            //密码输入框
            this.txtPassword = new EditText();
            txtPassword.IsNumberKeyboardType = true;
            txtPassword.Height = 1;
            bodyFrameLayout.AddChidren(txtPassword);
            txtPassword.Foucs = true;
            txtPassword.TextChangeEventHandler = (sender, e) =>
            {
                string passwrod = txtPassword.Text.Trim();
                btnErrorMsg.Text = string.Empty;
                for (int i = 0; i < 4; i++)
                {
                    if (i < passwrod.Length)
                    {
                        //实心图标
                        this.listIconContr[i].IsSelected = true;
                    }
                    else
                    {
                        //空心图标
                        this.listIconContr[i].IsSelected = false;
                    }
                }
                if (passwrod.Length == 4)
                {
                    //关闭输入法
                    Application.HideSoftInput();
                    this.ActionEvent?.Invoke(1, passwrod);
                }
            };
            bodyFrameLayout.ButtonClickEvent += (sedner, e) =>
            {
                txtPassword.Foucs = true;
            };
            btnIcon1.ButtonClickEvent += (sender, e) => { bodyFrameLayout.ButtonClickEvent(null, null); };
            btnIcon2.ButtonClickEvent += (sender, e) => { bodyFrameLayout.ButtonClickEvent(null, null); };
            btnIcon3.ButtonClickEvent += (sender, e) => { bodyFrameLayout.ButtonClickEvent(null, null); };
            btnIcon4.ButtonClickEvent += (sender, e) => { bodyFrameLayout.ButtonClickEvent(null, null); };
        }
        /// <summary>
        /// 初始化图标控件
        /// </summary>
        /// <returns></returns>
        private IconViewControl InitIconControl()
        {
            var btnIcon1 = new IconViewControl(16);
            btnIcon1.BorderColor = CSS_Color.FirstLevelTitleColor;
            btnIcon1.BorderWidth = (uint)Application.GetRealWidth(1);
            btnIcon1.Radius = (uint)Application.GetRealWidth(8);
            btnIcon1.BackgroundColor = CSS_Color.MainBackgroundColor;
            btnIcon1.SelectedBackgroundColor = CSS_Color.FirstLevelTitleColor;
            bodyFrameLayout.AddChidren(btnIcon1);
            //加入缓存
            this.listIconContr.Add(btnIcon1);
            return btnIcon1;
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            base.CloseFormBefore();
            this.ActionEvent = null;
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 显示错误消息
        /// </summary>
        /// <param name="i_errorMsg">需要显示的错误消息</param>
        public void ShowErrorMsg(string i_errorMsg)
        {
            this.txtPassword.Text = string.Empty;
            btnErrorMsg.Text = i_errorMsg;
            btnErrorMsg.Height = btnErrorMsg.GetRealRowCountByText() * Application.GetRealHeight(24);
            //全部弄成空心图标
            for (int i = 0; i < this.listIconContr.Count; i++)
            {
                this.listIconContr[i].IsSelected = false;
            }
        }
        #endregion
    }
}