using Shared.Phone.UserCenter; using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone { /// /// 文本组合的菜单控件 /// public class TextGroupMenuControl : FrameLayout { #region ■ 变量声明___________________________ /// /// 选择事件 /// public Action SelectEvent = null; /// /// 当前选择的主键(内部使用) /// private string oldSelectKey = string.Empty; /// /// 当前选择的主键 /// public string nowSelectKeys { get { return oldSelectKey; } } /// /// 前回选择的控件 /// private FrameLayoutStatuControl oldFrameBack = null; /// /// 前回选择的控件 /// private NormalViewControl oldBtnText = null; /// /// 文本对象 /// private Dictionary dicText = new Dictionary(); #endregion #region ■ 初始化_____________________________ /// /// 文本组合的菜单控件(完成初始化后,会根据默认选择调用回调函数) /// /// 文本集合(key:主键 value:显示文本) public TextGroupMenuControl(Dictionary i_dicText) { this.dicText = i_dicText; this.Height = Application.GetRealHeight(204); } /// /// 初始化控件(事件要至于它之前) /// public void InitControl() { var scrolContr = new HorizontalScrolViewLayout(); scrolContr.Gravity = Gravity.CenterVertical; scrolContr.Height = this.Height; this.AddChidren(scrolContr); //弄个空的进去占位置 var frameTemp = new FrameLayout(); frameTemp.Height = this.Height; frameTemp.Width = ControlCommonResourse.XXLeft / 2; scrolContr.AddChidren(frameTemp); var btnTempWidth = new ButtonBase(); btnTempWidth.TextSize = 12; //初始化设备模式的控件 int defultIndex = -1; int index = 0; foreach (string strKeys in dicText.Keys) { index++; if (oldSelectKey == string.Empty) { //初始值 oldSelectKey = strKeys; defultIndex = index; } //计算字符的真实宽度 btnTempWidth.Text = dicText[strKeys]; this.DoInitControl(scrolContr, strKeys, btnTempWidth.Text, btnTempWidth.GetRealWidthByText()); } //让控件滑动到指定的索引位置 if (defultIndex != -1) { scrolContr.ScrollToViewIndex(defultIndex + 1); } } /// /// 初始化控件 /// /// 列表控件 /// 字典的主键 /// 显示文本 /// 文本真实宽度 private void DoInitControl(HorizontalScrolViewLayout scrolContr, string strKey, string text, int textWidth) { //带底图控件的最小宽度 int minWidth = Application.GetRealWidth(255); //带底图控件的真实宽度 <文字的宽度的计算 frameBack.Width - (int)(frameBack.Height * 0.47)> int realWidth = textWidth + (int)(Application.GetRealHeight(159) * 0.47); if (realWidth < minWidth) { realWidth = minWidth; } //带图片的 var frameBack = new FrameLayoutStatuControl(); frameBack.UseClickStatu = false; frameBack.Gravity = Gravity.Center; frameBack.Height = Application.GetRealHeight(159); frameBack.Width = realWidth; if (oldSelectKey == strKey) { frameBack.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png"; oldFrameBack = frameBack; } else { frameBack.BackgroundImagePath = "Item/RoomIconBackground.png"; } scrolContr.AddChidren(frameBack); //文字 var btnText = new NormalViewControl(textWidth, frameBack.Height, false); btnText.Gravity = Gravity.CenterHorizontal; btnText.Text = text; btnText.TextSize = 12; btnText.TextAlignment = TextAlignment.Center; if (oldSelectKey == strKey) { btnText.TextColor = UserCenterColor.Current.White; oldBtnText = btnText; } else { btnText.TextColor = UserCenterColor.Current.TextGrayColor1; } frameBack.AddChidren(btnText, ChidrenBindMode.BindEvent); frameBack.ButtonClickEvent += (sender, e) => { if (oldSelectKey == strKey) { //同一个东西 return; } oldSelectKey = strKey; //状态变更 frameBack.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png"; btnText.TextColor = UserCenterColor.Current.White; oldFrameBack.BackgroundImagePath = "Item/RoomIconBackground.png"; oldBtnText.TextColor = UserCenterColor.Current.TextGrayColor1; oldFrameBack = frameBack; oldBtnText = btnText; //调用回调函数 this.SelectEvent?.Invoke(strKey, this.dicText[strKey]); }; //调用回调函数 if (oldSelectKey == strKey) { this.SelectEvent?.Invoke(strKey, this.dicText[strKey]); } } #endregion #region ■ 控件摧毁___________________________ /// /// 控件摧毁 /// public override void RemoveFromParent() { this.SelectEvent = null; base.RemoveFromParent(); } #endregion #region ■ 一般方法___________________________ /// /// 设置初始选择(请在初始化完成之前调用) /// /// 主键 public void SetDefultIndex(string strKey) { this.oldSelectKey = strKey; } #endregion } }