Class Layout
- Direct Known Subclasses:
 BoringLayout,DynamicLayout,StaticLayout
 For text that will be edited, use a DynamicLayout,
 which will be updated as the text changes.
 For text that will not change, use a StaticLayout.
- Since:
 - 3.0
 - See Also:
 
- 
Nested Class Summary
Nested Classes - 
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intstatic final float - 
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedLayout(CharSequence text, TextPaint paint, int width, Layout.Alignment align, float spacingMult, float spacingAdd) Subclasses of Layout use this constructor to set the display text, width, and other standard properties. - 
Method Summary
Modifier and TypeMethodDescriptionvoidDraw this Layout on the specified Canvas.final voiddrawBackground(Canvas canvas, int firstLine, int lastLine) Draw the visible background drawables of this Layout on the specified canvas.voidDraw all visible text lines of this Layout on the specified canvas.final Layout.AlignmentReturn the base alignment of this layout.abstract intReturns the number of extra pixels of descent padding in the bottom line of the Layout.voidgetCursorPath(int point, it.unimi.dsi.fastutil.floats.FloatArrayList dest, CharSequence buffer) Fills in the specified Path with a representation of a cursor at the specified offset.static floatgetDesiredWidth(CharSequence source, int start, int end, TextPaint paint) Return how wide a layout must be in order to display the specified text slice with one line per paragraph.static floatgetDesiredWidth(CharSequence source, TextPaint paint) Return how wide a layout must be in order to display the specified text with one line per paragraph.abstract intgetEllipsisCount(int line) Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.abstract intgetEllipsisStart(int line) Return the offset of the first character to be ellipsized away, relative to the start of the line.intReturn the width to which this Layout is ellipsizing, orgetWidth()if it is not doing anything special.intReturn the total height of this layout.intgetHeight(boolean cap) Return the total height of this layout.intgetIndentAdjust(int line, Layout.Alignment alignment) Returns the left indent for a line.final intgetLineAscent(int line) Get the ascent of the text on the specified line.final intgetLineBaseline(int line) Return the vertical position of the baseline of the specified line.final intgetLineBottom(int line) Return the vertical position of the bottom of the specified line.intgetLineBottom(int line, boolean includeLineSpacing) Return the vertical position of the bottom of the specified line.intgetLineBounds(int line, Rect bounds) Return the baseline for the specified line (0…getLineCount() - 1) If bounds is not null, return the top, left, right, bottom extents of the specified line in it.abstract booleangetLineContainsTab(int line) Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.abstract intReturn the number of lines of text in this layout.abstract intgetLineDescent(int line) Return the descent of the specified line(0…getLineCount() - 1).abstract DirectionsgetLineDirections(int line) Returns the directional run information for the specified line.final intgetLineEnd(int line) Return the text offset after the last character on the specified line.intgetLineForOffset(int offset) Get the line number on which the specified text offset appears.intgetLineForVertical(int vertical) Get the line number corresponding to the specified vertical position.floatgetLineLeft(int line) Get the leftmost position that should be exposed for horizontal scrolling on the specified line.floatgetLineMax(int line) Gets the unsigned horizontal extent of the specified line, including leading margin indent, but excluding trailing whitespace.final longgetLineRangeForDraw(Canvas canvas) Computes the range of visible lines that will be drawn on the specified canvas.floatgetLineRight(int line) Get the rightmost position that should be exposed for horizontal scrolling on the specified line.abstract intgetLineStart(int line) Return the text offset of the beginning of the specified line ( 0…getLineCount()).abstract intgetLineTop(int line) Return the vertical position of the top of the specified line (0…getLineCount()).intgetLineVisibleEnd(int line) Return the text offset after the last visible character (so whitespace is not counted) on the specified line.floatgetLineWidth(int line) Gets the unsigned horizontal extent of the specified line, including leading margin indent and trailing whitespace.intgetOffsetForHorizontal(int line, float horiz) Get the character offset on the specified line whose position is closest to the specified horizontal position.intgetOffsetToLeftOf(int offset) intgetOffsetToRightOf(int offset) final TextPaintgetPaint()Return the base Paint properties for this layout.final Layout.AlignmentgetParagraphAlignment(int line) Get the alignment of the specified paragraph, taking into account markup attached to it.abstract intgetParagraphDirection(int line) Returns the primary directionality of the paragraph containing the specified line, either 1 for left-to-right lines, or -1 for right-to-left lines (seeDIR_LEFT_TO_RIGHT,DIR_RIGHT_TO_LEFT).final intgetParagraphLeft(int line) Get the left edge of the specified paragraph, inset by left margins.final intgetParagraphRight(int line) Get the right edge of the specified paragraph, inset by right margins.floatgetPrimaryHorizontal(int offset) Get the primary horizontal position for the specified text offset.floatgetSecondaryHorizontal(int offset) Get the secondary horizontal position for the specified text offset.voidgetSelectionPath(int start, int end, it.unimi.dsi.fastutil.floats.FloatArrayList dest) Calculates the rectangles which should be highlighted to indicate a selection between start and end and feeds them into the given array.final floatfinal floatfinal CharSequencegetText()Return the text that is displayed by this Layout.final TextDirectionHeuristicReturn the heuristic used to determine paragraph text direction.abstract intReturns the (negative) number of extra pixels of ascent padding in the top line of the Layout.final intgetWidth()Return the width of this layout.final voidincreaseWidthTo(int wid) Increase the width of this layout to the specified width.booleanisRtlCharAt(int offset) Returns true if the character at offset is right to left (RTL). 
- 
Field Details
- 
DIR_LEFT_TO_RIGHT
public static final int DIR_LEFT_TO_RIGHT- See Also:
 
 - 
DIR_RIGHT_TO_LEFT
public static final int DIR_RIGHT_TO_LEFT- See Also:
 
 - 
TAB_INCREMENT
public static final float TAB_INCREMENT- See Also:
 
 
 - 
 - 
Constructor Details
- 
Layout
protected Layout(CharSequence text, TextPaint paint, int width, Layout.Alignment align, float spacingMult, float spacingAdd) Subclasses of Layout use this constructor to set the display text, width, and other standard properties.- Parameters:
 text- the text to renderpaint- the default paint for the layout. Styles can override various attributes of the paint.width- the wrapping width for the text.align- whether to left, right, or center the text. Styles can override the alignment.spacingMult- factor by which to scale the font size to get the default line spacingspacingAdd- amount to add to the default line spacing
 
 - 
 - 
Method Details
- 
draw
Draw this Layout on the specified Canvas.Note that this method just calls
drawBackground(Canvas, int, int)and thendrawText(Canvas, int, int). If you need to draw something between the two, such as blinking cursor and selection highlight, you may manually call them separately.- Parameters:
 canvas- the canvas to draw on- See Also:
 
 - 
drawBackground
Draw the visible background drawables of this Layout on the specified canvas.Significantly, visible area given by
firstLineandlastLineis computed bygetLineRangeForDraw(Canvas). You may never just call this method without that method.- Parameters:
 canvas- the canvas to draw onfirstLine- first line index (inclusive)lastLine- last line index (inclusive)- See Also:
 
 - 
drawText
Draw all visible text lines of this Layout on the specified canvas.Significantly, visible area given by
firstLineandlastLineis computed bygetLineRangeForDraw(Canvas). You may never just call this method without that method.- Parameters:
 canvas- the canvas to draw onfirstLine- first line index (inclusive)lastLine- last line index (inclusive)- See Also:
 
 - 
getLineRangeForDraw
Computes the range of visible lines that will be drawn on the specified canvas. It will be used fordrawText(Canvas, int, int). The higher 32 bits represent the first line number, while the lower 32 bits represent the last line number. Note that if the range is empty, then the method returns~0L.- Parameters:
 canvas- the canvas used to draw this Layout- Returns:
 - the range of lines that need to be drawn, possibly empty.
 
 - 
getLineForVertical
public int getLineForVertical(int vertical) Get the line number corresponding to the specified vertical position. If you ask for a position above 0, you get 0; if you ask for a position below the bottom of the text, you get the last line. - 
getLineForOffset
public int getLineForOffset(int offset) Get the line number on which the specified text offset appears. If you ask for a position before 0, you get 0; if you ask for a position beyond the end of the text, you get the last line. - 
getText
Return the text that is displayed by this Layout. - 
getPaint
Return the base Paint properties for this layout. Do NOT change the paint, which may result in funny drawing for this layout. - 
getWidth
Return the width of this layout. - 
getEllipsizedWidth
public int getEllipsizedWidth()Return the width to which this Layout is ellipsizing, orgetWidth()if it is not doing anything special. - 
increaseWidthTo
public final void increaseWidthTo(int wid) Increase the width of this layout to the specified width. Be careful to use this only when you know it is appropriate— it does not cause the text to reflow to use the full new width. - 
getHeight
public int getHeight()Return the total height of this layout. - 
getHeight
public int getHeight(boolean cap) Return the total height of this layout.- Parameters:
 cap- if true and max lines is set, returns the height of the layout at the max lines.
 - 
getAlignment
Return the base alignment of this layout. - 
getTextDirectionHeuristic
Return the heuristic used to determine paragraph text direction. - 
getSpacingMultiplier
public final float getSpacingMultiplier() - 
getSpacingAdd
public final float getSpacingAdd() - 
getLineCount
public abstract int getLineCount()Return the number of lines of text in this layout. - 
getLineBounds
Return the baseline for the specified line (0…getLineCount() - 1) If bounds is not null, return the top, left, right, bottom extents of the specified line in it.- Parameters:
 line- which line to examine (0..getLineCount() - 1)bounds- Optional. If not null, it returns the extent of the line- Returns:
 - the Y-coordinate of the baseline
 
 - 
getLineTop
public abstract int getLineTop(int line) Return the vertical position of the top of the specified line (0…getLineCount()). If the specified line is equal to the line count, returns the bottom of the last line. - 
getLineDescent
public abstract int getLineDescent(int line) Return the descent of the specified line(0…getLineCount() - 1). - 
getLineStart
public abstract int getLineStart(int line) Return the text offset of the beginning of the specified line ( 0…getLineCount()). If the specified line is equal to the line count, returns the length of the text. - 
getParagraphDirection
public abstract int getParagraphDirection(int line) Returns the primary directionality of the paragraph containing the specified line, either 1 for left-to-right lines, or -1 for right-to-left lines (seeDIR_LEFT_TO_RIGHT,DIR_RIGHT_TO_LEFT). - 
getLineContainsTab
public abstract boolean getLineContainsTab(int line) Returns whether the specified line contains one or more characters that need to be handled specially, like tabs. - 
getLineDirections
Returns the directional run information for the specified line. The array alternates counts of characters in left-to-right and right-to-left segments of the line.NOTE: this is inadequate to support bidirectional text, and will change.
 - 
getTopPadding
public abstract int getTopPadding()Returns the (negative) number of extra pixels of ascent padding in the top line of the Layout. - 
getBottomPadding
public abstract int getBottomPadding()Returns the number of extra pixels of descent padding in the bottom line of the Layout. - 
getIndentAdjust
Returns the left indent for a line. - 
getEllipsisStart
public abstract int getEllipsisStart(int line) Return the offset of the first character to be ellipsized away, relative to the start of the line. (So 0 if the beginning of the line is ellipsized, not getLineStart().) - 
getEllipsisCount
public abstract int getEllipsisCount(int line) Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place. - 
getLineMax
public float getLineMax(int line) Gets the unsigned horizontal extent of the specified line, including leading margin indent, but excluding trailing whitespace. - 
getLineWidth
public float getLineWidth(int line) Gets the unsigned horizontal extent of the specified line, including leading margin indent and trailing whitespace. - 
getLineEnd
public final int getLineEnd(int line) Return the text offset after the last character on the specified line. - 
getLineVisibleEnd
public int getLineVisibleEnd(int line) Return the text offset after the last visible character (so whitespace is not counted) on the specified line. - 
getLineBottom
public final int getLineBottom(int line) Return the vertical position of the bottom of the specified line. - 
getLineBottom
public int getLineBottom(int line, boolean includeLineSpacing) Return the vertical position of the bottom of the specified line.- Parameters:
 line- index of the lineincludeLineSpacing- whether to include the line spacing
 - 
getLineBaseline
public final int getLineBaseline(int line) Return the vertical position of the baseline of the specified line. - 
getLineAscent
public final int getLineAscent(int line) Get the ascent of the text on the specified line. The return value is negative to match the Paint.ascent() convention. - 
getParagraphAlignment
Get the alignment of the specified paragraph, taking into account markup attached to it. - 
getParagraphLeft
public final int getParagraphLeft(int line) Get the left edge of the specified paragraph, inset by left margins. - 
getParagraphRight
public final int getParagraphRight(int line) Get the right edge of the specified paragraph, inset by right margins. - 
getPrimaryHorizontal
public float getPrimaryHorizontal(int offset) Get the primary horizontal position for the specified text offset. This is the location where a new character would be inserted in the paragraph's primary direction. - 
getSecondaryHorizontal
public float getSecondaryHorizontal(int offset) Get the secondary horizontal position for the specified text offset. This is the location where a new character would be inserted in the direction other than the paragraph's primary direction. - 
getOffsetForHorizontal
public int getOffsetForHorizontal(int line, float horiz) Get the character offset on the specified line whose position is closest to the specified horizontal position. - 
isRtlCharAt
public boolean isRtlCharAt(int offset) Returns true if the character at offset is right to left (RTL).- Parameters:
 offset- the offset- Returns:
 - true if the character is RTL, false if it is LTR
 
 - 
getOffsetToLeftOf
public int getOffsetToLeftOf(int offset)  - 
getOffsetToRightOf
public int getOffsetToRightOf(int offset)  - 
getLineLeft
public float getLineLeft(int line) Get the leftmost position that should be exposed for horizontal scrolling on the specified line. - 
getLineRight
public float getLineRight(int line) Get the rightmost position that should be exposed for horizontal scrolling on the specified line. - 
getCursorPath
public void getCursorPath(int point, @NonNull it.unimi.dsi.fastutil.floats.FloatArrayList dest, @NonNull CharSequence buffer) Fills in the specified Path with a representation of a cursor at the specified offset. This will often be a vertical line but can be multiple discontinuous lines in text with multiple directionalities.- Parameters:
 point- the cursor offset in charsdest- the destination linesbuffer- the editing buffer
 - 
getSelectionPath
public void getSelectionPath(int start, int end, @NonNull it.unimi.dsi.fastutil.floats.FloatArrayList dest) Calculates the rectangles which should be highlighted to indicate a selection between start and end and feeds them into the given array.- Parameters:
 start- the starting index of the selectionend- the ending index of the selectiondest- the destination rectangles
 - 
getDesiredWidth
Return how wide a layout must be in order to display the specified text with one line per paragraph.As of O, Uses
TextDirectionHeuristics.FIRSTSTRONG_LTRas the default text direction heuristics. In the earlier versions usesTextDirectionHeuristics.LTRas the default. - 
getDesiredWidth
Return how wide a layout must be in order to display the specified text slice with one line per paragraph.As of O, Uses
TextDirectionHeuristics.FIRSTSTRONG_LTRas the default text direction heuristics. In the earlier versions usesTextDirectionHeuristics.LTRas the default. 
 -