using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone.UserCenter { /// /// 制作一个带有地区码的手机号输入控件(添加入界面后,调用InitControl()完成最后的加载) /// public class PhoneAreaControl : FrameLayout { /// /// 地区代码 /// public string AreaCode { get { return btnArea.Text.Replace("+", string.Empty); } set { btnArea.Text = "+" + value; } } /// /// 手机号码 /// public string PhoneNumber { get { return txtPhone.Text.Trim(); } set { txtPhone.Text = value; } } /// /// 地区代码控件 /// public ViewNormalControl btnArea = null; /// /// 手机号输入控件 /// public InputTextControl txtPhone = null; /// /// 输入框的长度 /// private int InputTextWidth = 0; /// /// 左右的空白间距 /// private int leftRightSpace = 0; /// /// 全部地区的代码 /// private List AreaCodeList = null; /// /// 制作一个带有地区码的手机号输入控件(添加入界面后,调用InitControl()完成最后的加载) /// /// 这个是输入框的长度 /// 左右的空白间距 public PhoneAreaControl(int i_width = 770, int i_leftRightSpace = 0) { this.X = ControlCommonResourse.XXLeft; this.InputTextWidth = i_width; this.leftRightSpace = i_leftRightSpace; //左右间距 + 地区代码 + 线的间距 + 输入框 this.Width = i_leftRightSpace * 2 + 180 + 20 + i_width; } /// /// 初始化控件 /// /// 画面类型的FrameLayout public void InitControl(FrameLayout form) { //地区代码 btnArea = new ViewNormalControl(140, true); btnArea.X = Application.GetRealWidth(this.leftRightSpace); btnArea.Text = "+" + Common.CommonPage.PhoneZoneStr; btnArea.TextColor = UserCenterColor.Current.TextGrayColor; btnArea.TextAlignment = TextAlignment.CenterLeft; btnArea.Gravity = Gravity.CenterVertical; this.AddChidren(btnArea); btnArea.MouseUpEventHandler += (sender, e) => { //显示地区代码列表 this.ShowAreaCodeForm(form); }; //线 var btnLine = new ViewNormalControl(1, Application.GetRealHeight(50), false); btnLine.X = btnArea.Right; btnLine.BackgroundColor = UserCenterColor.Current.Line; btnLine.Gravity = Gravity.CenterVertical; this.AddChidren(btnLine); //请输入手机号码 txtPhone = new InputTextControl(this.InputTextWidth, true); txtPhone.Gravity = Gravity.CenterVertical; txtPhone.X = btnLine.Right + Application.GetRealWidth(60); txtPhone.PlaceholderText = Language.StringByID(R.MyInternationalizationString.uPleaseInputPhoneNumber); txtPhone.PlaceholderTextColor = UserCenterColor.Current.TextTipColor; this.AddChidren(txtPhone); } /// /// 显示地区代码列表 /// /// private async void ShowAreaCodeForm(FrameLayout frameLayout) { //初始化全部的地区代码列表 bool flage = await this.InitAreaCodeList(frameLayout); if (flage == false) { return; } Application.RunOnMainThread(() => { var areaform = new PhoneAreaForm(); frameLayout.AddChidren(areaform); areaform.InitControl(AreaCodeList); areaform.AreaCodeSelectEvent += (areaCode) => { btnArea.Text = "+" + areaCode; }; }); } /// /// 初始化全部的地区代码列表 /// /// 界面 /// private async System.Threading.Tasks.Task InitAreaCodeList(FrameLayout frameLayout) { if (this.AreaCodeList != null) { return true; } //开启进度条 ProgressBar.Show(); //获取全部的地区代码列表 var Pra = new Common.SendDataToServer.GetAreaCodeOBJ(); Pra.RequestVersion = Common.CommonPage.RequestVersion; string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetAreaCode", Pra); //关闭进度条 ProgressBar.Close(); if (result == null) { return false; } this.AreaCodeList = Newtonsoft.Json.JsonConvert.DeserializeObject>(result); return true; } /// /// 显示地区代码列表的控件 /// private class PhoneAreaForm : FrameLayout { /// /// _AreaCodeSelectEvent /// public delegate void _AreaCodeSelectEvent(string areaCode); /// /// 地区确认选择的事件 /// public _AreaCodeSelectEvent AreaCodeSelectEvent; /// /// 列表控件 /// private VerticalScrolViewLayout listView = null; /// /// 前一次选择的地区 /// private AreaCodeSelectRow oldRowArea = null; /// /// 初始化控件 /// public void InitControl(List i_AreaCodeList) { this.BackgroundColor = UserCenterColor.Current.DialogBackColor; //这是一个框 var frameLayout = new FrameLayout(); frameLayout.Width = Application.GetRealWidth(700); frameLayout.Height = Application.GetRealHeight(1000); frameLayout.Gravity = Gravity.Center; frameLayout.Radius = 5; frameLayout.BackgroundColor = UserCenterColor.Current.ClickButtonColor; this.AddChidren(frameLayout); //请选择区号 var btnTitle = new ViewNormalControl(frameLayout.Width, Application.GetRealHeight(150)); btnTitle.TextAlignment = TextAlignment.Center; btnTitle.TextID = R.MyInternationalizationString.PleaseSelectAreaCode; frameLayout.AddChidren(btnTitle); listView = new VerticalScrolViewLayout(); listView.Y = btnTitle.Bottom; listView.Height = frameLayout.Height - Application.GetRealHeight(150 * 2); listView.BackgroundColor = UserCenterColor.Current.BodyFrameLayout; frameLayout.AddChidren(listView); //取消 var btnCancel = new ViewNormalControl(frameLayout.Width / 2 - 1, Application.GetRealHeight(150)); btnCancel.TextColor = UserCenterColor.Current.White; btnCancel.TextID = R.MyInternationalizationString.uCancel; btnCancel.Gravity = Gravity.BottomLeft; btnCancel.TextAlignment = TextAlignment.Center; frameLayout.AddChidren(btnCancel); btnCancel.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); }; //白线 var btnLine = new ViewNormalControl(1, Application.GetRealHeight(150)); btnLine.X = btnCancel.Right; btnLine.Y = btnCancel.Y; btnLine.BackgroundColor = UserCenterColor.Current.BodyFrameLayout; frameLayout.AddChidren(btnLine); //确认 var btnOk = new ViewNormalControl(frameLayout.Width / 2 - 1, Application.GetRealHeight(150)); btnOk.TextColor = UserCenterColor.Current.White; btnOk.TextID = R.MyInternationalizationString.OkMsg; btnOk.Gravity = Gravity.BottomRight; btnOk.TextAlignment = TextAlignment.Center; frameLayout.AddChidren(btnOk); btnOk.MouseUpEventHandler += (sender, e) => { if (this.AreaCodeSelectEvent != null && this.oldRowArea != null) { this.AreaCodeSelectEvent(this.oldRowArea.codeObj.Code); } this.RemoveFromParent(); }; //添加全部的地区代码行 this.AddAllRowlayout(i_AreaCodeList); } /// /// 添加全部的地区代码行 /// private void AddAllRowlayout(List i_AreaCodeList) { //循环列表 foreach (var data in i_AreaCodeList) { Application.RunOnMainThread(() => { var row = new AreaCodeSelectRow(this.listView, data); if (data.Code == Common.CommonPage.PhoneZoneStr) { row.IsSelect = true; this.oldRowArea = row; } row.MouseUpEvent += (sender, e) => { if (this.oldRowArea != null) { this.oldRowArea.IsSelect = false; } row.IsSelect = true; this.oldRowArea = row; }; }); } } } } }