/// <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; }
/// <summary> /// Raises the click_dist OK button_ input tag event. /// Sets currTag if inputText is good, else makes Toast. /// </summary> /// <param name='sender'> /// Sender. /// </param> /// <param name='e'> /// E. /// </param> private void OnClick_distOKButton_InputTag(object sender, EventArgs e) { string inputText = distEditText.Text; bool tagIsUnique = true; foreach (KeyValuePair <string, string> kvPair in dataKVPairList) { if (inputText == kvPair.Key) { tagIsUnique = false; Toast.MakeText( this, "The tag must be a UNIQUE identifier.", ToastLength.Short ) .Show(); break; } } if (tagIsUnique == true) { string distStr = currDist.realValue.ToString("0.000") + "\n"; dataKVPairList.Add(new KeyValuePair <string, string> (inputText, distStr)); resultTextView.Text += distStr; Android.Text.Layout layout = resultTextView.Layout; if (layout != null && resultTextView.Text != distStr) { // scrollAmount = bottomOfText - scrolledAlready - height int scrollDelta = layout.GetLineBottom(resultTextView.LineCount - 1) - resultTextView.ScrollY - resultTextView.Height; if (scrollDelta > 0) { resultTextView.ScrollBy(0, scrollDelta); } } DismissDialog(INPUT_TAG_DIALOG); RemoveDialog(INPUT_TAG_DIALOG); } }
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(); } }