using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone.UserCenter
|
{
|
/// <summary>
|
/// 做成一个里面只装FrameLayout的列表型控件(它不会调整高度,有桌布)
|
/// </summary>
|
public class VerticalFrameControl : VerticalScrolViewLayout
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 行之间的间距
|
/// </summary>
|
public int rowSpace = 0;
|
/// <summary>
|
/// 桌布控件
|
/// </summary>
|
private FrameLayout m_frameTable = null;
|
/// <summary>
|
/// 桌布控件
|
/// </summary>
|
public FrameLayout frameTable
|
{
|
get
|
{
|
if (m_frameTable == null) { this.InitFrameTable(); }
|
return m_frameTable;
|
}
|
}
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 做成一个列表型的FrameLayout(它不会调整高度)
|
/// </summary>
|
/// <param name="i_rowSpace">行之间的间距(这个值是与行控件绑定一起使用的)</param>
|
public VerticalFrameControl(int i_rowSpace = 0)
|
{
|
rowSpace = Application.GetRealHeight(i_rowSpace);
|
#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 FrameLayout();
|
this.m_frameTable.Width = this.Width;
|
this.m_frameTable.Height = this.Height;
|
this.AddChidren(this.m_frameTable);
|
}
|
|
#endregion
|
|
#region ■ 添加子控件_________________________
|
|
/// <summary>
|
/// 添加Frame子控件
|
/// </summary>
|
/// <param name="view"></param>
|
public void AddChidrenFrame(FrameLayout frame)
|
{
|
//初始化桌布控件
|
this.InitFrameTable();
|
|
var child = this.m_frameTable.GetChildren(this.m_frameTable.ChildrenCount - 1);
|
if (child != null)
|
{
|
frame.Y = child.Bottom + rowSpace;
|
}
|
this.m_frameTable.AddChidren(frame);
|
//调整桌布高度
|
if (this.m_frameTable.Height < frame.Bottom)
|
{
|
this.m_frameTable.Height = frame.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)
|
{
|
//调整桌布高度
|
if (frame.Height < value + buttomSpace)
|
{
|
frame.Height = value + buttomSpace;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 调整桌布高度
|
/// </summary>
|
public void AdjustTableHeight()
|
{
|
//获取坐标底部最下面的那个控件的底部坐标
|
int value = this.GetLocationMostLastViewBottom(this.m_frameTable);
|
if (value != -1)
|
{
|
//调整桌布高度
|
this.m_frameTable.Height = value;
|
}
|
}
|
|
/// <summary>
|
/// 针对底部点击按钮,调整控件真实高度
|
/// </summary>
|
/// <param name="correctionsValue">Y轴补正值(真实值,列表控件不在bodyFramelayout的时候使用)</param>
|
public void AdjustRealHeightByBottomButton(int correctionsValue = 0)
|
{
|
var btnTemp = new BottomClickButton();
|
if (btnTemp.Yaxis >= this.m_frameTable.Height + correctionsValue)
|
{
|
//没有超过
|
return;
|
}
|
//添加临时控件,直至可以滑动超过底部按钮
|
int oldRowSpace = this.rowSpace;
|
this.rowSpace = 0;
|
var frameBackTemp = new FrameLayout();
|
frameBackTemp.Height = ControlCommonResourse.BodyFrameHeight - btnTemp.Yaxis + Application.GetRealHeight(23);
|
this.AddChidrenFrame(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
|
}
|
}
|