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;
};
});
}
}
}
}
}