示例#1
0
 /// <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;
 }
示例#2
0
            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();
                }
            }
示例#3
0
            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
                    );
            }