using System;
|
using Shared;
|
|
#if __IOS__
|
using UIKit;
|
using Foundation;
|
#else
|
using Android.Graphics;
|
#endif
|
|
namespace HDL_ON.UI
|
{
|
/// <summary>
|
/// TextButton
|
/// 解决iOS 文本到边框有边距问题
|
/// 支持根据文本动态计算高度
|
/// </summary>
|
public class TextButton : Button
|
{
|
public TextButton()
|
{
|
#if __IOS__
|
//重写修改文本到边框的内边距为0
|
(this.uiView as MyButton).ContentEdgeInsets = new UIEdgeInsets(0, 0, 0, 0);
|
#endif
|
|
}
|
|
/// <summary>
|
/// 设置需要限制的最大行数
|
/// 但是超过行数的话会缺少省略号...,暂时无法解决
|
/// </summary>
|
public int MaxLine = 0;
|
/// <summary>
|
/// 动态计算高度
|
/// 赋值文本后和指定宽度后,通过计算真实的需要宽度和指定宽度算出多行需要的真实高度
|
/// 该方法有误差不能100%准确
|
/// 最正确方法是根据 单行单个字体的高度加上行距来计算
|
/// </summary>
|
/// <returns></returns>
|
public int GetMoreLineNeedHeight()
|
{
|
//计算需要的真实宽度
|
int needWidth = this.GetTextWidth();
|
//计算在指定宽度情况下,需要的真实行数
|
int line = (needWidth / this.Width);
|
//求余
|
int modValue = (needWidth % this.Width);
|
//余大于0,则多加一行
|
if (modValue > 0)
|
{
|
line = line + 1;
|
}
|
if (line > 0)
|
{
|
if(MaxLine != 0)
|
{
|
line = Math.Min(line, MaxLine);
|
}
|
return line * this.Height;
|
}
|
else
|
{
|
return this.Height;
|
}
|
}
|
|
int _lineSpacing;
|
/// <summary>
|
/// 设置行间距
|
/// </summary>
|
public int LineSpacing
|
{
|
set
|
{
|
_lineSpacing = value;
|
SetButtonLineSpacing(_lineSpacing);
|
}
|
}
|
|
|
#if __IOS__
|
/// <summary>
|
/// 按钮设置行距方法
|
/// </summary>
|
/// <param name="spacing"></param>
|
void SetButtonLineSpacing(int spacing)
|
{
|
UIStringAttributes stringAttributes = new UIStringAttributes
|
{
|
Font = (this.uiView as MyButton).TitleLabel.Font,
|
ForegroundColor = UIColor.Black,
|
ParagraphStyle = new NSMutableParagraphStyle() { LineSpacing = spacing }
|
};
|
var AttributedText = new NSMutableAttributedString(Text);
|
AttributedText.AddAttributes(stringAttributes, new NSRange(0, Text.Length));
|
(this.uiView as MyButton).TitleLabel.AttributedText = AttributedText;
|
}
|
|
/// <summary>
|
/// 显示当前文字需要几行
|
/// </summary>
|
/// <returns></returns>
|
public int GetNeedLinesWithWidth()
|
{
|
return (this.GetTextWidth() / this.Width) * this.Height;
|
//return 0;
|
}
|
|
|
#else
|
|
/// <summary>
|
/// 按钮设置行距方法
|
/// </summary>
|
/// <param name="spacing"></param>
|
void SetButtonLineSpacing(int spacing)
|
{
|
(this.AndroidView as Android.Widget.Button).SetLineSpacing(spacing, 1);
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <returns></returns>
|
int GetTextHeight()
|
{
|
string text = "Text";
|
Rect rect = new Rect();
|
(this.AndroidView as Android.Widget.Button).Paint.GetTextBounds(text, 0, text.Length, rect);
|
return rect.Height();
|
}
|
#endif
|
}
|
|
|
|
}
|