public abstract class Layout extends Object
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
.
Modifier and Type | Class and Description |
---|---|
static class |
Layout.Alignment |
static class |
Layout.Directions
Stores information about bidirectional (left-to-right or right-to-left)
text within the layout of a line.
|
Modifier and Type | Field and Description |
---|---|
static int |
DIR_LEFT_TO_RIGHT |
static int |
DIR_RIGHT_TO_LEFT |
Modifier | Constructor and Description |
---|---|
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.
|
protected |
Layout(CharSequence text,
TextPaint paint,
int width,
Layout.Alignment align,
TextDirectionHeuristic textDir,
float spacingMult,
float spacingAdd)
Subclasses of Layout use this constructor to set the display text,
width, and other standard properties.
|
Modifier and Type | Method and Description |
---|---|
void |
draw(Canvas c)
Draw this Layout on the specified Canvas.
|
void |
draw(Canvas canvas,
Path highlight,
Paint highlightPaint,
int cursorOffsetVertical)
Draw this Layout on the specified canvas, with the highlight path drawn
between the background and the text.
|
void |
drawBackground(Canvas canvas,
Path highlight,
Paint highlightPaint,
int cursorOffsetVertical,
int firstLine,
int lastLine) |
void |
drawText(Canvas canvas,
int firstLine,
int lastLine) |
Layout.Alignment |
getAlignment()
Return the base alignment of this layout.
|
abstract int |
getBottomPadding()
Returns the number of extra pixels of descent padding in the
bottom line of the Layout.
|
void |
getCursorPath(int point,
Path dest,
CharSequence editingBuffer)
Fills in the specified Path with a representation of a cursor
at the specified offset.
|
static float |
getDesiredWidth(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 float |
getDesiredWidth(CharSequence source,
TextPaint paint)
Return how wide a layout must be in order to display the
specified text with one line per paragraph.
|
abstract int |
getEllipsisCount(int line)
Returns the number of characters to be ellipsized away, or 0 if
no ellipsis is to take place.
|
abstract int |
getEllipsisStart(int line)
Return the offset of the first character to be ellipsized away,
relative to the start of the line.
|
int |
getEllipsizedWidth()
Return the width to which this Layout is ellipsizing, or
getWidth() if it is not doing anything special. |
int |
getHeight()
Return the total height of this layout.
|
int |
getLineAscent(int line)
Get the ascent of the text on the specified line.
|
int |
getLineBaseline(int line)
Return the vertical position of the baseline of the specified line.
|
int |
getLineBottom(int line)
Return the vertical position of the bottom of the specified line.
|
int |
getLineBounds(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 boolean |
getLineContainsTab(int line)
Returns whether the specified line contains one or more
characters that need to be handled specially, like tabs
or emoji.
|
abstract int |
getLineCount()
Return the number of lines of text in this layout.
|
abstract int |
getLineDescent(int line)
Return the descent of the specified line(0…getLineCount() - 1).
|
abstract Layout.Directions |
getLineDirections(int line)
Returns the directional run information for the specified line.
|
int |
getLineEnd(int line)
Return the text offset after the last character on the specified line.
|
int |
getLineForOffset(int offset)
Get the line number on which the specified text offset appears.
|
int |
getLineForVertical(int vertical)
Get the line number corresponding to the specified vertical position.
|
float |
getLineLeft(int line)
Get the leftmost position that should be exposed for horizontal
scrolling on the specified line.
|
float |
getLineMax(int line)
Gets the unsigned horizontal extent of the specified line, including
leading margin indent, but excluding trailing whitespace.
|
long |
getLineRangeForDraw(Canvas canvas) |
float |
getLineRight(int line)
Get the rightmost position that should be exposed for horizontal
scrolling on the specified line.
|
abstract int |
getLineStart(int line)
Return the text offset of the beginning of the specified line (
0…getLineCount()).
|
abstract int |
getLineTop(int line)
Return the vertical position of the top of the specified line
(0…getLineCount()).
|
int |
getLineVisibleEnd(int line)
Return the text offset after the last visible character (so whitespace
is not counted) on the specified line.
|
float |
getLineWidth(int line)
Gets the unsigned horizontal extent of the specified line, including
leading margin indent and trailing whitespace.
|
int |
getOffsetForHorizontal(int line,
float horiz)
Get the character offset on the specified line whose position is
closest to the specified horizontal position.
|
int |
getOffsetToLeftOf(int offset) |
int |
getOffsetToRightOf(int offset) |
TextPaint |
getPaint()
Return the base Paint properties for this layout.
|
Layout.Alignment |
getParagraphAlignment(int line)
Get the alignment of the specified paragraph, taking into account
markup attached to it.
|
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 (see
DIR_LEFT_TO_RIGHT , DIR_RIGHT_TO_LEFT ). |
int |
getParagraphLeft(int line)
Get the left edge of the specified paragraph, inset by left margins.
|
int |
getParagraphRight(int line)
Get the right edge of the specified paragraph, inset by right margins.
|
float |
getPrimaryHorizontal(int offset)
Get the primary horizontal position for the specified text offset.
|
float |
getSecondaryHorizontal(int offset)
Get the secondary horizontal position for the specified text offset.
|
void |
getSelectionPath(int start,
int end,
Path dest)
Fills in the specified Path with a representation of a highlight
between the specified offsets.
|
float |
getSpacingAdd()
Return the number of units of leading that are added to each line.
|
float |
getSpacingMultiplier()
Return what the text height is multiplied by to get the line height.
|
CharSequence |
getText()
Return the text that is displayed by this Layout.
|
TextDirectionHeuristic |
getTextDirectionHeuristic()
Return the heuristic used to determine paragraph text direction.
|
abstract int |
getTopPadding()
Returns the (negative) number of extra pixels of ascent padding in the
top line of the Layout.
|
int |
getWidth()
Return the width of this layout.
|
void |
increaseWidthTo(int wid)
Increase the width of this layout to the specified width.
|
boolean |
isLevelBoundary(int offset)
Returns true if the character at offset and the preceding character
are at different run levels (and thus there's a split caret).
|
boolean |
isRtlCharAt(int offset)
Returns true if the character at offset is right to left (RTL).
|
protected boolean |
isSpanned() |
public static final int DIR_LEFT_TO_RIGHT
public static final int DIR_RIGHT_TO_LEFT
protected Layout(CharSequence text, TextPaint paint, int width, Layout.Alignment align, float spacingMult, float spacingAdd)
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 spacingprotected Layout(CharSequence text, TextPaint paint, int width, Layout.Alignment align, TextDirectionHeuristic textDir, float spacingMult, float spacingAdd)
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 spacingpublic static float getDesiredWidth(CharSequence source, TextPaint paint)
public static float getDesiredWidth(CharSequence source, int start, int end, TextPaint paint)
public void draw(Canvas c)
public void draw(Canvas canvas, Path highlight, Paint highlightPaint, int cursorOffsetVertical)
canvas
- the canvashighlight
- the path of the highlight or cursor; can be nullhighlightPaint
- the paint for the highlightcursorOffsetVertical
- the amount to temporarily translate the
canvas while rendering the highlightpublic void drawText(Canvas canvas, int firstLine, int lastLine)
public void drawBackground(Canvas canvas, Path highlight, Paint highlightPaint, int cursorOffsetVertical, int firstLine, int lastLine)
public long getLineRangeForDraw(Canvas canvas)
canvas
- public final CharSequence getText()
public final TextPaint getPaint()
public final int getWidth()
public int getEllipsizedWidth()
getWidth()
if it is not doing anything special.public final void increaseWidthTo(int wid)
public int getHeight()
public final Layout.Alignment getAlignment()
public final float getSpacingMultiplier()
public final float getSpacingAdd()
public final TextDirectionHeuristic getTextDirectionHeuristic()
public abstract int getLineCount()
public int getLineBounds(int line, Rect bounds)
line
- which line to examine (0..getLineCount() - 1)bounds
- Optional. If not null, it returns the extent of the linepublic abstract int getLineTop(int line)
public abstract int getLineDescent(int line)
public abstract int getLineStart(int line)
public abstract int getParagraphDirection(int line)
DIR_LEFT_TO_RIGHT
, DIR_RIGHT_TO_LEFT
).public abstract boolean getLineContainsTab(int line)
public abstract Layout.Directions getLineDirections(int line)
NOTE: this is inadequate to support bidirectional text, and will change.
public abstract int getTopPadding()
public abstract int getBottomPadding()
public boolean isLevelBoundary(int offset)
offset
- the offsetpublic boolean isRtlCharAt(int offset)
offset
- the offsetpublic float getPrimaryHorizontal(int offset)
public float getSecondaryHorizontal(int offset)
public float getLineLeft(int line)
public float getLineRight(int line)
public float getLineMax(int line)
public float getLineWidth(int line)
public int getLineForVertical(int vertical)
public int getLineForOffset(int offset)
public int getOffsetForHorizontal(int line, float horiz)
public final int getLineEnd(int line)
public int getLineVisibleEnd(int line)
public final int getLineBottom(int line)
public final int getLineBaseline(int line)
public final int getLineAscent(int line)
public int getOffsetToLeftOf(int offset)
public int getOffsetToRightOf(int offset)
public void getCursorPath(int point, Path dest, CharSequence editingBuffer)
public void getSelectionPath(int start, int end, Path dest)
public final Layout.Alignment getParagraphAlignment(int line)
public final int getParagraphLeft(int line)
public final int getParagraphRight(int line)
protected final boolean isSpanned()
public abstract int getEllipsisStart(int line)
public abstract int getEllipsisCount(int line)