using Shared; using System; using System.Collections.Generic; using System.Text; namespace HDL_ON.Stan { /// <summary> /// åšæˆä¸€ä¸ªé‡Œé¢åªè£…FrameLayout的列表型控件,有刷新功能(有桌布,它ä¸ä¼šè°ƒæ•´é«˜åº¦) /// </summary> public class VerticalFrameRefreshControl : VerticalRefreshLayout { #region â– å˜é‡å£°æ˜Ž___________________________ /// <summary> /// è¡Œä¹‹é—´çš„é—´è· /// </summary> public int rowSpace = 0; /// <summary> /// 桌布控件 /// </summary> private NormalFrameLayout m_frameTable = null; /// <summary> /// 桌布控件 /// </summary> public NormalFrameLayout frameTable { get { if (m_frameTable == null) { this.InitFrameTable(); } return m_frameTable; } } /// <summary> /// 一个临时的东西 /// </summary> private FrameLayout frameBackTemp = null; #endregion #region â– åˆå§‹åŒ–_____________________________ /// <summary> /// åšæˆä¸€ä¸ªåˆ—表型的FrameLayout,有刷新功能(它ä¸ä¼šè°ƒæ•´é«˜åº¦) /// </summary> /// <param name="i_rowSpace">行之间的间è·(这个值是与行控件绑定一起使用的)</param> public VerticalFrameRefreshControl(int i_rowSpace = 0) { rowSpace = Application.GetRealHeight(i_rowSpace); this.VerticalScrollBarEnabled = false; #if __IOS__ //自动åç§»å–æ¶ˆ if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) { (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never; } #endif } /// <summary> /// åˆå§‹åŒ–桌布控件 /// </summary> private void InitFrameTable() { if (this.m_frameTable != null && this.m_frameTable.Parent != null) { return; } this.m_frameTable = new NormalFrameLayout(); this.m_frameTable.Width = this.Width; this.m_frameTable.Height = this.Height; base.AddChidren(this.m_frameTable); } #endregion #region â– æ·»åŠ åæŽ§ä»¶_________________________ /// <summary> /// æ·»åŠ åæŽ§ä»¶(注æ„,å®ƒæ˜¯å¾€ä¸‹åŠ æŽ§ä»¶,æ¤æ–¹æ³•æ˜¯åªæ”¹å˜Yè½´) /// </summary> /// <param name="view"></param> public override void AddChidren(View view) { //åˆå§‹åŒ–桌布控件 this.InitFrameTable(); int value = this.GetLocationMostLastViewBottom(this.frameTable); if (value != -1) { view.Y = value + rowSpace; } this.frameTable.AddChidren(view); //调整桌布高度 if (this.frameTable.Height < view.Bottom) { this.frameTable.Height = view.Bottom; } } /// <summary> /// æ·»åŠ åæŽ§ä»¶(注æ„,å®ƒæ˜¯å¾€ä¸‹åŠ æŽ§ä»¶,æ¤æ–¹æ³•是改å˜é«˜åº¦) /// </summary> /// <param name="view"></param> public void AddChidren2(View view) { //åˆå§‹åŒ–桌布控件 this.InitFrameTable(); //获å–åæ ‡åº•部最下é¢çš„é‚£ä¸ªæŽ§ä»¶çš„åº•éƒ¨åæ ‡ int value = this.GetLocationMostLastViewBottom(this.frameTable); if (value != -1) { view.Y = value; } this.frameTable.AddChidren(view); if (rowSpace > 0) { view.Height += rowSpace; } //调整桌布高度 if (this.frameTable.Height < view.Bottom) { this.frameTable.Height = view.Bottom; } } #endregion #region ■一般方法___________________________ /// <summary> /// 调整åFrameLayout的高度 /// </summary> /// <param name="frame"></param> /// <param name="buttomSpace">底部空白间è·(真实值)</param> public void AdjustChidrenFrameHeight(FrameLayout frame, int buttomSpace) { //获å–åæ ‡åº•部最下é¢çš„é‚£ä¸ªæŽ§ä»¶çš„åº•éƒ¨åæ ‡ int value = this.GetLocationMostLastViewBottom(frame); if (value != -1) { //调整桌布高度 frame.Height = value + buttomSpace; } } /// <summary> /// 调整桌布高度 /// </summary> /// <param name="buttomSpace">底部空白间è·(真实值)</param> public void AdjustTableHeight(int buttomSpace = 0) { //2020.05.25è¿½åŠ if (this.frameBackTemp != null && this.frameBackTemp.Parent != null) { this.frameBackTemp.RemoveFromParent(); } //获å–åæ ‡åº•部最下é¢çš„é‚£ä¸ªæŽ§ä»¶çš„åº•éƒ¨åæ ‡ int value = this.GetLocationMostLastViewBottom(this.frameTable); if (value != -1) { //调整桌布高度 this.frameTable.Height = value + buttomSpace; } else { //还原为原æ¥çš„高度 this.RecoverTableHeight(); } } /// <summary> /// 针对底部点击按钮,调整控件真实高度 /// </summary> /// <param name="correctionsValue">Yè½´è¡¥æ£å€¼(真实值,列表控件ä¸åœ¨bodyFramelayout的时候使用)</param> public void AdjustRealHeightByBottomButton(int correctionsValue = 0) { //调整桌布高度 2020.05.25è¿½åŠ this.AdjustTableHeight(); var btnTemp = new BottomClickButton(); if (btnTemp.Yaxis >= this.frameTable.Height + correctionsValue) { //没有超过 return; } //æ·»åŠ ä¸´æ—¶æŽ§ä»¶,直至å¯ä»¥æ»‘动超过底部按钮 int oldRowSpace = this.rowSpace; this.rowSpace = 0; this.frameBackTemp = new FrameLayout(); frameBackTemp.Height = HdlControlResourse.BodyFrameHeight - btnTemp.Yaxis + Application.GetRealHeight(8); this.AddChidren(frameBackTemp); this.rowSpace = oldRowSpace; } /// <summary> /// 还原桌布高度 /// </summary> public void RecoverTableHeight() { if (this.m_frameTable != null) { m_frameTable.Height = this.Height; } } /// <summary> /// 获å–åæ ‡åº•部最下é¢çš„é‚£ä¸ªæŽ§ä»¶çš„åº•éƒ¨åæ ‡ /// </summary> /// <returns></returns> private int GetLocationMostLastViewBottom(FrameLayout frame) { int bottomHeight = -1; if (frame == null) { return bottomHeight; } for (int i = 0; i < frame.ChildrenCount; i++) { var child = frame.GetChildren(i); if (child.Bottom > bottomHeight) { bottomHeight = child.Bottom; } } return bottomHeight; } #endregion } }