/// <summary> /// Builds a new layout with the specified parameters. /// </summary> public LayoutBuilder( Java.Lang.ICharSequence textFormatted, TextPaint paint, TextUtils.TruncateAt ellipsize, Android.Text.Layout.Alignment layoutAlignment, TextWrapping textWrapping, int maxLines, Size availableSize, bool exactWidth, float lineHeight, LineStackingStrategy lineStackingStrategy, LayoutBuilder existingBuilder ) { _textFormatted = textFormatted; _paint = paint; _ellipsize = ellipsize; _layoutAlignment = layoutAlignment; _textWrapping = textWrapping; _maxLines = maxLines; AvailableSize = availableSize; _exactWidth = exactWidth; _lineHeight = lineHeight; _lineStackingStrategy = lineStackingStrategy; Layout = existingBuilder?.Layout; _metrics = existingBuilder?._metrics; }
private void MakeLayout(int width, int maxLines = int.MaxValue) { if (_textWrapping == TextWrapping.NoWrap) { maxLines = 1; } if (maxLines == 1) { _metrics = BoringLayout.IsBoring(_textFormatted, _paint, _metrics); if (_metrics != null) { if (Layout is BoringLayout boring) { Layout = boring.ReplaceOrMake( _textFormatted, _paint, width, _layoutAlignment, 1, _addedSpacing = GetSpacingAdd(_paint), _metrics, true, _ellipsize, width ); return; } else { Layout = new BoringLayout( _textFormatted, _paint, width, _layoutAlignment, 1, _addedSpacing = GetSpacingAdd(_paint), _metrics, true, _ellipsize, width ); return; } } } if ((int)Android.OS.Build.VERSION.SdkInt < 28) { Layout = UnoStaticLayoutBuilder.Build( /*source:*/ _textFormatted, /*paint: */ _paint, /*outerwidth: */ width, /*align: */ _layoutAlignment, /*spacingmult:*/ 1, /*spacingadd: */ _addedSpacing = GetSpacingAdd(_paint), /*includepad:*/ true, /*ellipsize: */ _ellipsize, /*ellipsizedWidth: */ width, /*maxLines: */ maxLines ); } else { Layout = StaticLayout.Builder.Obtain(_textFormatted, 0, _textFormatted.Length(), _paint, width) .SetLineSpacing(_addedSpacing = GetSpacingAdd(_paint), 1) .SetMaxLines(maxLines) .SetEllipsize(_ellipsize) .SetEllipsizedWidth(width) .SetAlignment(_layoutAlignment) .SetIncludePad(true) .Build(); } }
private void MakeLayout(int width, int maxLines = int.MaxValue) { if (_textWrapping == TextWrapping.NoWrap) { maxLines = 1; } if (maxLines == 1) { _metrics = BoringLayout.IsBoring(_textFormatted, _paint, _metrics); if (_metrics != null) { if (Layout is BoringLayout boring) { Layout = boring.ReplaceOrMake( _textFormatted, _paint, width, _layoutAlignment, 1, _addedSpacing = GetSpacingAdd(_paint), _metrics, true, _ellipsize, width ); return; } else { Layout = new BoringLayout( _textFormatted, _paint, width, _layoutAlignment, 1, _addedSpacing = GetSpacingAdd(_paint), _metrics, true, _ellipsize, width ); return; } } } Layout = UnoStaticLayoutBuilder.Build( /*source:*/ _textFormatted, /*paint: */ _paint, /*outerwidth: */ width, /*align: */ _layoutAlignment, /*spacingmult:*/ 1, /*spacingadd: */ _addedSpacing = GetSpacingAdd(_paint), /*includepad:*/ true, /*ellipsize: */ _ellipsize, /*ellipsizedWidth: */ width, /*maxLines: */ maxLines ); }