BoringLayout


public class BoringLayout
extends Layout implements TextUtils.EllipsizeCallback

java.lang.Object
   ↳ android.text.Layout
     ↳ android.text.BoringLayout


A BoringLayout is a very simple Layout implementation for text that fits on a single line and is all left-to-right characters. You will probably never want to make one of these yourself; if you do, be sure to call isBoring(CharSequence, TextPaint) first to make sure the text meets the criteria.

This class is used by widgets to control text layout. You should not need to use this class directly unless you are implementing your own widget or custom display object, in which case you are encouraged to use a Layout instead of calling Canvas.drawText() directly.

Summary

Nested classes

class BoringLayout.Metrics

 

Inherited constants

Inherited fields

Public constructors

BoringLayout(CharSequence source, TextPaint paint, int outerwidth, Layout.Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad)
BoringLayout(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth)
BoringLayout(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth, boolean useFallbackLineSpacing)

Public methods

RectF computeDrawingBoundingBox()

Get an actual bounding box that draws text content.

void draw(Canvas c, Path highlight, Paint highlightpaint, int cursorOffset)

Draw this Layout on the specified canvas, with the highlight path drawn between the background and the text.

void ellipsized(int start, int end)

Callback for the ellipsizer to report what region it ellipsized.

int getBottomPadding()

Returns the number of extra pixels of descent padding in the bottom line of the Layout.

int getEllipsisCount(int line)

Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.

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 ellipsized.

int getHeight()

Return the total height of this layout.

boolean getLineContainsTab(int line)

Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.

int getLineCount()

Return the number of lines of text in this layout.

int getLineDescent(int line)

Return the descent of the specified line(0…getLineCount() - 1).

final Layout.Directions getLineDirections(int line)

Returns the directional run information for the specified line.

float getLineMax(int line)

Gets the unsigned horizontal extent of the specified line, including leading margin indent, but excluding trailing whitespace.

int getLineStart(int line)

Return the text offset of the beginning of the specified line ( 0…getLineCount()).

int getLineTop(int line)

Return the vertical position of the top of the specified line (0…getLineCount()).

float getLineWidth(int line)

Gets the unsigned horizontal extent of the specified line, including leading margin indent and trailing whitespace.

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 getTopPadding()

Returns the (negative) number of extra pixels of ascent padding in the top line of the Layout.

static BoringLayout.Metrics isBoring(CharSequence text, TextPaint paint, BoringLayout.Metrics metrics)

Determine and compute metrics if given text can be handled by BoringLayout.

static BoringLayout.Metrics isBoring(CharSequence text, TextPaint paint)

Determine and compute metrics if given text can be handled by BoringLayout.

static BoringLayout.Metrics isBoring(CharSequence text, TextPaint paint, TextDirectionHeuristic textDir, boolean useFallbackLineSpacing, BoringLayout.Metrics metrics)

Returns null if not boring; the width, ascent, and descent in the provided Metrics object (or a new one if the provided one was null) if boring.

boolean isFallbackLineSpacingEnabled()

Return true if the fallback line space is enabled in this Layout.

static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth, boolean useFallbackLineSpacing)

Utility function to construct a BoringLayout instance.

static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, float spacingmult, float spacingadd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth)

Utility function to construct a BoringLayout instance.

static BoringLayout make(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad)

Utility function to construct a BoringLayout instance.

BoringLayout replaceOrMake(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth, boolean useFallbackLineSpacing)

Returns a BoringLayout for the specified text, potentially reusing this one if it is already suitable.

BoringLayout replaceOrMake(CharSequence source, TextPaint paint, int outerWidth, Layout.Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth)

Returns a BoringLayout for the specified text, potentially reusing this one if it is already suitable.

BoringLayout replaceOrMake(CharSequence source, TextPaint paint, int outerwidth, Layout.Alignment align, float spacingMult, float spacingAdd, BoringLayout.Metrics metrics, boolean includePad)

Returns a BoringLayout for the specified text, potentially reusing this one if it is already suitable.

Inherited methods

Public constructors

BoringLayout

Added in API level 1
public BoringLayout (CharSequence source, 
                TextPaint paint, 
                int outerwidth, 
                Layout.Alignment align, 
                float spacingMult, 
                float spacingAdd, 
                BoringLayout.Metrics metrics, 
                boolean includePad)

Parameters
source CharSequence: the text to render

paint TextPaint: the default paint for the layout

outerwidth int: the wrapping width for the text

align Layout.Alignment: whether to left, right, or center the text

spacingMult float: this value is no longer used by BoringLayout

spacingAdd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

BoringLayout

Added in API level 1
public BoringLayout (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                float spacingMult, 
                float spacingAdd, 
                BoringLayout.Metrics metrics, 
                boolean includePad, 
                TextUtils.TruncateAt ellipsize, 
                int ellipsizedWidth)

Parameters
source CharSequence: the text to render

paint TextPaint: the default paint for the layout

outerWidth int: the wrapping width for the text

align Layout.Alignment: whether to left, right, or center the text

spacingMult float: this value is no longer used by BoringLayout

spacingAdd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

ellipsize TextUtils.TruncateAt: whether to ellipsize the text if width of the text is longer than the requested outerWidth

ellipsizedWidth int: the width to which this Layout is ellipsizing. If ellipsize is null, or is TextUtils.TruncateAt#MARQUEE this value is not used, outerWidth is used instead

BoringLayout

Added in API level 33
public BoringLayout (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                float spacingMult, 
                float spacingAdd, 
                BoringLayout.Metrics metrics, 
                boolean includePad, 
                TextUtils.TruncateAt ellipsize, 
                int ellipsizedWidth, 
                boolean useFallbackLineSpacing)

Parameters
source CharSequence: the text to render This value cannot be null.

paint TextPaint: the default paint for the layout This value cannot be null.

outerWidth int: the wrapping width for the text Value is 0 or greater

align Layout.Alignment: whether to left, right, or center the text This value cannot be null.

spacingMult float: this value is no longer used by BoringLayout

spacingAdd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width This value cannot be null.

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

ellipsize TextUtils.TruncateAt: whether to ellipsize the text if width of the text is longer than the requested outerWidth. null if ellipsis is not applied.

ellipsizedWidth int: the width to which this Layout is ellipsizing. If ellipsize is null, or is TextUtils.TruncateAt#MARQUEE this value is not used, outerWidth is used instead Value is 0 or greater

useFallbackLineSpacing boolean: True for adjusting the line spacing based on fallback fonts. False for keeping the first font's line height. If some glyphs requires larger vertical spaces, by passing true to this argument, the layout increase the line height to fit all glyphs.

Public methods

computeDrawingBoundingBox

Added in API level 35
public RectF computeDrawingBoundingBox ()

Get an actual bounding box that draws text content. Note that the RectF#top and RectF#bottom may be different from the Layout#getLineTop(int) of the first line and Layout#getLineBottom(int) of the last line. The line top and line bottom are calculated based on yMin/yMax or ascent/descent value of font file. On the other hand, the drawing bounding boxes are calculated based on actual glyphs used there.

Returns
RectF This value cannot be null.

draw

Added in API level 1
public void draw (Canvas c, 
                Path highlight, 
                Paint highlightpaint, 
                int cursorOffset)

Draw this Layout on the specified canvas, with the highlight path drawn between the background and the text.

Parameters
c Canvas: the canvas

highlight Path: the path of the selection highlight or cursor; can be null

highlightpaint Paint: the paint for the selection highlight

cursorOffset int: the amount to temporarily translate the canvas while rendering the highlight

ellipsized

Added in API level 1
public void ellipsized (int start, 
                int end)

Callback for the ellipsizer to report what region it ellipsized.

Parameters
start int

end int

getBottomPadding

Added in API level 1
public int getBottomPadding ()

Returns the number of extra pixels of descent padding in the bottom line of the Layout.

Returns
int

getEllipsisCount

Added in API level 1
public int getEllipsisCount (int line)

Returns the number of characters to be ellipsized away, or 0 if no ellipsis is to take place.

Parameters
line int

Returns
int

getEllipsisStart

Added in API level 1
public 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().)

Parameters
line int

Returns
int

getEllipsizedWidth

Added in API level 1
public int getEllipsizedWidth ()

Return the width to which this layout is ellipsized. If no ellipsize is applied, the same amount of getWidth() is returned.

Returns
int the amount of ellipsized width in pixels. Value is 0 or greater

getHeight

Added in API level 1
public int getHeight ()

Return the total height of this layout.

Returns
int

getLineContainsTab

Added in API level 1
public boolean getLineContainsTab (int line)

Returns whether the specified line contains one or more characters that need to be handled specially, like tabs.

Parameters
line int

Returns
boolean

getLineCount

Added in API level 1
public int getLineCount ()

Return the number of lines of text in this layout.

Returns
int

getLineDescent

Added in API level 1
public int getLineDescent (int line)

Return the descent of the specified line(0…getLineCount() - 1).

Parameters
line int

Returns
int

getLineDirections

Added in API level 1
public final Layout.Directions getLineDirections (int line)

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.

Parameters
line int

Returns
Layout.Directions

getLineMax

Added in API level 1
public float getLineMax (int line)

Gets the unsigned horizontal extent of the specified line, including leading margin indent, but excluding trailing whitespace.

Parameters
line int

Returns
float

getLineStart

Added in API level 1
public 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.

Parameters
line int

Returns
int

getLineTop

Added in API level 1
public 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.

Parameters
line int

Returns
int

getLineWidth

Added in API level 1
public float getLineWidth (int line)

Gets the unsigned horizontal extent of the specified line, including leading margin indent and trailing whitespace.

Parameters
line int

Returns
float

getParagraphDirection

Added in API level 1
public 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).

Parameters
line int

Returns
int

getTopPadding

Added in API level 1
public int getTopPadding ()

Returns the (negative) number of extra pixels of ascent padding in the top line of the Layout.

Returns
int

isBoring

Added in API level 1
public static BoringLayout.Metrics isBoring (CharSequence text, 
                TextPaint paint, 
                BoringLayout.Metrics metrics)

Determine and compute metrics if given text can be handled by BoringLayout.

Parameters
text CharSequence: a text

paint TextPaint: a paint

metrics BoringLayout.Metrics: a metrics object to be recycled. If null is passed, this function creat new object.

Returns
BoringLayout.Metrics layout metric for the given text. If metrics is not null, this method fills values to given metrics object instead of allocating new metrics object. null if given text is unable to be handled by BoringLayout.

isBoring

Added in API level 1
public static BoringLayout.Metrics isBoring (CharSequence text, 
                TextPaint paint)

Determine and compute metrics if given text can be handled by BoringLayout.

Parameters
text CharSequence: a text

paint TextPaint: a paint

Returns
BoringLayout.Metrics layout metric for the given text. null if given text is unable to be handled by BoringLayout.

isBoring

Added in API level 33
public static BoringLayout.Metrics isBoring (CharSequence text, 
                TextPaint paint, 
                TextDirectionHeuristic textDir, 
                boolean useFallbackLineSpacing, 
                BoringLayout.Metrics metrics)

Returns null if not boring; the width, ascent, and descent in the provided Metrics object (or a new one if the provided one was null) if boring.

Parameters
text CharSequence: a text to be calculated text layout. This value cannot be null.

paint TextPaint: a paint object used for styling. This value cannot be null.

textDir TextDirectionHeuristic: a text direction. This value cannot be null.

useFallbackLineSpacing boolean: True for adjusting the line spacing based on fallback fonts. False for keeping the first font's line height. If some glyphs requires larger vertical spaces, by passing true to this argument, the layout increase the line height to fit all glyphs.

metrics BoringLayout.Metrics: the out metrics. This value may be null.

Returns
BoringLayout.Metrics metrics on success. null if text cannot be rendered by BoringLayout.

isFallbackLineSpacingEnabled

Added in API level 33
public boolean isFallbackLineSpacingEnabled ()

Return true if the fallback line space is enabled in this Layout.

Returns
boolean true if the fallback line space is enabled. Otherwise, returns false.

make

Added in API level 33
public static BoringLayout make (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                BoringLayout.Metrics metrics, 
                boolean includePad, 
                TextUtils.TruncateAt ellipsize, 
                int ellipsizedWidth, 
                boolean useFallbackLineSpacing)

Utility function to construct a BoringLayout instance. The spacing multiplier and additional amount spacing are not used by BoringLayout. Layout#getSpacingMultiplier() will return 1.0 and Layout#getSpacingAdd() will return 0.0.

Parameters
source CharSequence: the text to render This value cannot be null.

paint TextPaint: the default paint for the layout This value cannot be null.

outerWidth int: the wrapping width for the text Value is 0 or greater

align Layout.Alignment: whether to left, right, or center the text This value cannot be null.

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width This value cannot be null.

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

ellipsize TextUtils.TruncateAt: whether to ellipsize the text if width of the text is longer than the requested width. null if ellipsis is not applied.

ellipsizedWidth int: the width to which this Layout is ellipsizing. If ellipsize is null, or is TextUtils.TruncateAt#MARQUEE this value is not used, outerWidth is used instead Value is 0 or greater

useFallbackLineSpacing boolean: True for adjusting the line spacing based on fallback fonts. False for keeping the first font's line height. If some glyphs requires larger vertical spaces, by passing true to this argument, the layout increase the line height to fit all glyphs.

Returns
BoringLayout This value cannot be null.

make

Added in API level 1
public static BoringLayout make (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                float spacingmult, 
                float spacingadd, 
                BoringLayout.Metrics metrics, 
                boolean includePad, 
                TextUtils.TruncateAt ellipsize, 
                int ellipsizedWidth)

Utility function to construct a BoringLayout instance.

Parameters
source CharSequence: the text to render

paint TextPaint: the default paint for the layout

outerWidth int: the wrapping width for the text

align Layout.Alignment: whether to left, right, or center the text

spacingmult float: this value is no longer used by BoringLayout

spacingadd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

ellipsize TextUtils.TruncateAt: whether to ellipsize the text if width of the text is longer than the requested width

ellipsizedWidth int: the width to which this Layout is ellipsizing. If ellipsize is null, or is TextUtils.TruncateAt#MARQUEE this value is not used, outerWidth is used instead

Returns
BoringLayout

make

Added in API level 1
public static BoringLayout make (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                float spacingMult, 
                float spacingAdd, 
                BoringLayout.Metrics metrics, 
                boolean includePad)

Utility function to construct a BoringLayout instance.

Parameters
source CharSequence: the text to render

paint TextPaint: the default paint for the layout

outerWidth int: the wrapping width for the text

align Layout.Alignment: whether to left, right, or center the text

spacingMult float: this value is no longer used by BoringLayout

spacingAdd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

Returns
BoringLayout

replaceOrMake

Added in API level 33
public BoringLayout replaceOrMake (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                BoringLayout.Metrics metrics, 
                boolean includePad, 
                TextUtils.TruncateAt ellipsize, 
                int ellipsizedWidth, 
                boolean useFallbackLineSpacing)

Returns a BoringLayout for the specified text, potentially reusing this one if it is already suitable. The caller must make sure that no one is still using this Layout. The spacing multiplier and additional amount spacing are not used by BoringLayout. Layout#getSpacingMultiplier() will return 1.0 and Layout#getSpacingAdd() will return 0.0.

Parameters
source CharSequence: the text to render This value cannot be null.

paint TextPaint: the default paint for the layout This value cannot be null.

outerWidth int: the wrapping width for the text Value is 0 or greater

align Layout.Alignment: whether to left, right, or center the text This value cannot be null.

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width This value cannot be null.

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

ellipsize TextUtils.TruncateAt: whether to ellipsize the text if width of the text is longer than the requested width. null if ellipsis not applied.

ellipsizedWidth int: the width to which this Layout is ellipsizing. If ellipsize is null, or is TextUtils.TruncateAt#MARQUEE this value is not used, outerWidth is used instead Value is 0 or greater

useFallbackLineSpacing boolean: True for adjusting the line spacing based on fallback fonts. False for keeping the first font's line height. If some glyphs requires larger vertical spaces, by passing true to this argument, the layout increase the line height to fit all glyphs.

Returns
BoringLayout This value cannot be null.

replaceOrMake

Added in API level 1
public BoringLayout replaceOrMake (CharSequence source, 
                TextPaint paint, 
                int outerWidth, 
                Layout.Alignment align, 
                float spacingMult, 
                float spacingAdd, 
                BoringLayout.Metrics metrics, 
                boolean includePad, 
                TextUtils.TruncateAt ellipsize, 
                int ellipsizedWidth)

Returns a BoringLayout for the specified text, potentially reusing this one if it is already suitable. The caller must make sure that no one is still using this Layout.

Parameters
source CharSequence: the text to render

paint TextPaint: the default paint for the layout

outerWidth int: the wrapping width for the text

align Layout.Alignment: whether to left, right, or center the text

spacingMult float: this value is no longer used by BoringLayout

spacingAdd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

ellipsize TextUtils.TruncateAt: whether to ellipsize the text if width of the text is longer than the requested width

ellipsizedWidth int: the width to which this Layout is ellipsizing. If ellipsize is null, or is TextUtils.TruncateAt#MARQUEE this value is not used, outerWidth is used instead

Returns
BoringLayout

replaceOrMake

Added in API level 1
public BoringLayout replaceOrMake (CharSequence source, 
                TextPaint paint, 
                int outerwidth, 
                Layout.Alignment align, 
                float spacingMult, 
                float spacingAdd, 
                BoringLayout.Metrics metrics, 
                boolean includePad)

Returns a BoringLayout for the specified text, potentially reusing this one if it is already suitable. The caller must make sure that no one is still using this Layout.

Parameters
source CharSequence: the text to render

paint TextPaint: the default paint for the layout

outerwidth int: the wrapping width for the text

align Layout.Alignment: whether to left, right, or center the text

spacingMult float: this value is no longer used by BoringLayout

spacingAdd float: this value is no longer used by BoringLayout

metrics BoringLayout.Metrics: #Metrics instance that contains information about FontMetrics and line width

includePad boolean: set whether to include extra space beyond font ascent and descent which is needed to avoid clipping in some scripts

Returns
BoringLayout