mac
2024-07-25 3f6685c77beeb12baf840733fb890860f4c26e7c
HDL_ON/UI/UI2/FuntionControlView/Aks/CommonView/TypeSingleFramLayout.cs
@@ -4,105 +4,82 @@
namespace HDL_ON.UI.UI2.FuntionControlView.Aks.CommonView
{
    public class TypeSingleFramLayout : BaseFramLayout
    public class TypeSingleFramLayout
    {
        /// <summary>
        /// 是否可以点击
        /// </summary>
        private bool mIsClick = true;
        private uint UpBackgroundColor = BaseFramLayout.unParentBackgroundColor;
        private uint DownBackgroundColor = BaseFramLayout.seleBackgroundColor;
        private uint UpBackgroundColor = 0x00000000;
        private uint DownBackgroundColor = 0xff454635;
        public TypeSingleFramLayout(int width, int height)
        /// <summary>
        /// 设置控制点击事件
        /// </summary>
        /// <param name="isClick">false点击无效</param>
        public void setClick(bool isClick)
        {
            this.Width = Application.GetRealWidth(width);
            this.Height = Application.GetRealHeight(height);
            this.Radius = (uint)Application.GetRealHeight(20);
            this.BackgroundColor = MusicColor.ViewColor;
            this.mIsClick = isClick;
        }
        Button btnLeftImage = new Button
        /// <summary>
        /// 单个类型容器
        /// </summary>
        public FrameLayout singleFramLayout = new FrameLayout
        {
            X=Application.GetRealWidth(16),
            BackgroundColor = MusicColor.ViewColor,
            //Gravity = Gravity.CenterHorizontal,
            Width = Application.GetRealWidth(101),
            Height = Application.GetRealHeight(34),//40
            Radius = (uint)Application.GetRealHeight(17),
        };
        public Button btnLeftImage = new Button
        {
            X = Application.GetRealWidth(16),
            Width = Application.GetRealWidth(16),
            Height = Application.GetRealWidth(16),
            UnSelectedImagePath = "AksIcon/yingku.png",
            Gravity = Gravity.CenterVertical,
            Name = "btnLeftImage",
        };
        Button btnName = new Button
        public Button btnName = new Button
        {
            Width = Application.GetRealWidth(32),
            Height = Application.GetRealHeight(23),
           TextID=StringId.yingku,
            TextID = StringId.yingku,
            TextSize = TextSize.Text16,
            TextColor = MusicColor.TextColor,
            TextAlignment = TextAlignment.Center,
            Gravity = Gravity.CenterVertical,
            IsMoreLines = true,
            Padding = new Padding(0, 0, 0, 0),
            Name = "btnName",
        };
        Button btnRightImage = new Button
        public Button btnRightImage = new Button
        {
            Width = Application.GetRealWidth(16),
            Height = Application.GetRealWidth(16),
            Width = Application.GetRealWidth(5),
            Height = Application.GetRealWidth(8),
            UnSelectedImagePath = "AksIcon/yingkunext.png",
            Gravity = Gravity.CenterVertical,
            Name = "btnRightImage",
        };
        public void AddBtnLeftImage()
        public void AddView(FrameLayout layout)
        {
            this.AddChidren(btnLeftImage);
        }
        public void AddBtnName(int gap = 4)
        {
            this.AddChidren(btnName);
            if (this.IsAddBtn(btnLeftImage))
            {
                btnName.X = btnLeftImage.Right + Application.GetRealWidth(gap);
            }
            //if (btnName.GetTextWidth() < btnName.Width)
            //{
            //    btnName.Width = btnName.GetTextWidth();
            //}
        }
        public void AddBtnRightImage(int gap = 8)
        {
            this.AddChidren(btnRightImage);
            if (this.IsAddBtn(btnName))
            {
                btnRightImage.X = btnName.Right + Application.GetRealWidth(gap);
                if (gap == 8)
                {
                    btnRightImage.Width = Application.GetRealWidth(5);
                    btnRightImage.Height = Application.GetRealHeight(8);
                }
            }
            layout.AddChidren(singleFramLayout);
            singleFramLayout.AddChidren(btnLeftImage);
            singleFramLayout.AddChidren(btnName);
            singleFramLayout.AddChidren(btnRightImage);
            btnName.X = btnLeftImage.Right + Application.GetRealWidth(4);
            btnRightImage.X = btnName.Right + Application.GetRealWidth(8);
        }
        public Button GetBtnLeftImage()
        {
            return btnLeftImage;
        }
        public Button GetBtnName()
        {
            return btnName;
        }
        public Button GetBtnRightImage()
        {
            return btnRightImage;
        }
        public void SetClickUpBackgroundColor(uint backgroundColor)
        {
@@ -118,16 +95,17 @@
        /// <summary>
        /// 事件监听方法
        /// </summary>
        /// <param name="action">回调(第一个是父类对象;第二个是图标对象;第三个是状态对象</param>
        public void SetClickListener(Action<FrameLayout, Button, Button, Button> action)
        /// <param name="action">回调(第一个是父类对象;</param>
        public void SetClickListener(Action<FrameLayout> action)
        {
            EventHandler<MouseEventArgs> UpClick = (sender, e) =>
            {
                this.BackgroundColor = this.UpBackgroundColor;
                action?.Invoke(this, btnLeftImage, btnName, btnRightImage);
                action?.Invoke(singleFramLayout);
                //singleFramLayout.BackgroundColor = this.UpBackgroundColor;
                //弹起来还原背景颜色
            };
            this.MouseUpEventHandler += UpClick;
            singleFramLayout.MouseUpEventHandler += UpClick;
            btnLeftImage.MouseUpEventHandler += UpClick;
            btnName.MouseUpEventHandler += UpClick;
            btnRightImage.MouseUpEventHandler += UpClick;
@@ -135,45 +113,71 @@
            EventHandler<MouseEventArgs> DownClick = (sender, e) =>
            {
                //按下去改变背景颜色
                this.BackgroundColor = this.DownBackgroundColor;
                //singleFramLayout.BackgroundColor = this.DownBackgroundColor;
            };
            this.MouseDownEventHandler += DownClick;
            singleFramLayout.MouseDownEventHandler += DownClick;
            btnLeftImage.MouseDownEventHandler += DownClick;
            btnName.MouseDownEventHandler += DownClick;
            btnRightImage.MouseDownEventHandler += DownClick;
        }
        /// <summary>
        /// 在父布局查找子控件是否存在
        /// 自动计算控件长度
        /// </summary>
        /// <param name="btn">查找对象</param>
        /// <returns>存在为true,否则为false</returns>
        private bool IsAddBtn(View btn)
        /// <param name="orientation">位置(左或右)</param>
        /// <param name="frame">父容器</param>
        /// <param name="btnName">备注控件</param>
        /// <param name="btnImage">图标备注控件</param>
        /// <param name="btnNameWidth">备注控件宽度</param>
        /// <param name="btnNameWidthMaxValue">备注控件宽度最大值</param>
        /// <param name="parentDefaultWidthMaxValue">父控件宽度默认最大值</param>
        public void CustomCalculationWidth(Orientation orientation, FrameLayout frame, Button btnName, Button btnImage, int btnNameWidth,int btnNameWidthMaxValue = 110, int parentDefaultWidthMaxValue = 101)
        {
            if (this.ChildrenCount <= 0 || btn == null)
            {
                return false;
            }
            for (int i = 0; i < this.ChildrenCount; i++)
            {
                View view = this.GetChildren(i);
                if (view == null)
                {
                    continue;
                }
                if (view is Button)
                {
                    if (view.Name == btn.Name)
                    {
                        return true;
                    }
                }
            int parentRightX = 226;
            int parentLeftX = 16;
            if (btnName.GetTextWidth() > Application.GetRealWidth(btnNameWidth))
            {
                frame.Width = Application.GetRealWidth(parentDefaultWidthMaxValue - btnNameWidth) + btnName.GetTextWidth();
                if (orientation == Orientation.right)
                {
                    frame.X = Application.GetRealWidth(parentRightX + btnNameWidth) - btnName.GetTextWidth();
                }
                else if (orientation == Orientation.left)
                {
                    frame.X = Application.GetRealWidth(parentLeftX);
                }
                btnName.Width = btnName.GetTextWidth();
                btnImage.X = btnName.Right + Application.GetRealWidth(8);
            }
            return false;
            if (btnName.GetTextWidth() > Application.GetRealWidth(btnNameWidthMaxValue))
            {
                btnName.Width = Application.GetRealWidth(btnNameWidthMaxValue);
                if (orientation == Orientation.right)
                {
                    frame.X =Application.GetRealWidth(parentRightX+ btnNameWidth) - btnName.Width;
                }
                else if (orientation == Orientation.left)
                {
                    frame.X = Application.GetRealWidth(parentLeftX);
                }
                frame.Width = Application.GetRealWidth(parentDefaultWidthMaxValue - btnNameWidth) + btnName.Width;
                btnImage.X = btnName.Right + Application.GetRealWidth(8);
            }
        }
        public enum Orientation
        {
            left,
            right,
        }
    }
}