PrecomputedText

public class PrecomputedText
extends Object implements Spannable

java.lang.Object
   ↳ android.text.PrecomputedText


A text which has the character metrics data. A text object that contains the character metrics data and can be used to improve the performance of text layout operations. When a PrecomputedText is created with a given CharSequence, it will measure the text metrics during the creation. This PrecomputedText instance can be set on TextView or StaticLayout. Since the text layout information will be included in this instance, TextView or StaticLayout will not have to recalculate this information. Note that the PrecomputedText created from different parameters of the target TextView will be rejected internally and compute the text layout again with the current TextView parameters.

 An example usage is:
 
  static void asyncSetText(TextView textView, final String longString, Executor bgExecutor) {
      // construct precompute related parameters using the TextView that we will set the text on.
      final PrecomputedText.Params params = textView.getTextMetricsParams();
      final Reference textViewRef = new WeakReference<>(textView);
      bgExecutor.submit(() -> {
          TextView textView = textViewRef.get();
          if (textView == null) return;
          final PrecomputedText precomputedText = PrecomputedText.create(longString, params);
          textView.post(() -> {
              TextView textView = textViewRef.get();
              if (textView == null) return;
              textView.setText(precomputedText);
          });
      });
  }
 
 
Note that the PrecomputedText created from different parameters of the target TextView will be rejected. Note that any NoCopySpan attached to the original text won't be passed to PrecomputedText.

Summary

Nested classes

class PrecomputedText.Params

The information required for building PrecomputedText

Inherited constants

Public methods

char charAt(int index)

Returns the char value at the specified index.

static PrecomputedText create(CharSequence text, PrecomputedText.Params params)

Create a new PrecomputedText which will pre-compute text measurement and glyph positioning information.

void getBounds(int start, int end, Rect bounds)

Retrieves the text bounding box for the given range.

void getFontMetricsInt(int start, int end, Paint.FontMetricsInt outMetrics)

Retrieves the text font metrics for the given range.

int getParagraphCount()

Returns the count of paragraphs.

int getParagraphEnd(int paraIndex)

Returns the paragraph end offset of the text.

int getParagraphStart(int paraIndex)

Returns the paragraph start offset of the text.

PrecomputedText.Params getParams()

Returns the layout parameters used to measure this text.

int getSpanEnd(Object tag)

Return the end of the range of text to which the specified markup object is attached, or -1 if the object is not attached.

int getSpanFlags(Object tag)

Return the flags that were specified when Spannable#setSpan was used to attach the specified markup object, or 0 if the specified object has not been attached.

int getSpanStart(Object tag)

Return the beginning of the range of text to which the specified markup object is attached, or -1 if the object is not attached.

<T> T[] getSpans(int start, int end, Class<T> type)

Return an array of the markup objects attached to the specified slice of this CharSequence and whose type is the specified type or a subclass of it.

float getWidth(int start, int end)

Returns text width for the given range.

int length()

Returns the length of this character sequence.

int nextSpanTransition(int start, int limit, Class<T> type)

Return the first offset greater than start where a markup object of class type begins or ends, or limit if there are no starts or ends greater than start but less than limit.

void removeSpan(Object what)

Remove the specified object from the range of text to which it was attached, if any.

void setSpan(Object what, int start, int end, int flags)

Attach the specified markup object to the range start…end of the text, or move the object to that range if it was already attached elsewhere.

CharSequence subSequence(int start, int end)

Returns a CharSequence that is a subsequence of this sequence.

String toString()

Returns a string representation of the object.

Inherited methods

Public methods

charAt

Added in API level 28
public char charAt (int index)

Returns the char value at the specified index. An index ranges from zero to length() - 1. The first char value of the sequence is at index zero, the next at index one, and so on, as for array indexing.

If the char value specified by the index is a surrogate, the surrogate value is returned.

Parameters
index int: the index of the char value to be returned

Returns
char the specified char value

create

Added in API level 28
public static PrecomputedText create (CharSequence text, 
                PrecomputedText.Params params)

Create a new PrecomputedText which will pre-compute text measurement and glyph positioning information.

This can be expensive, so computing this on a background thread before your text will be presented can save work on the UI thread.

Note that any NoCopySpan attached to the text won't be passed to the created PrecomputedText.

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

params PrecomputedText.Params: parameters that define how text will be precomputed This value cannot be null.

Returns
PrecomputedText A PrecomputedText

getBounds

Added in API level 28
public void getBounds (int start, 
                int end, 
                Rect bounds)

Retrieves the text bounding box for the given range. Both start and end offset need to be in the same paragraph, otherwise IllegalArgumentException will be thrown.

Parameters
start int: the inclusive start offset in the text Value is 0 or greater

end int: the exclusive end offset in the text Value is 0 or greater

bounds Rect: the output rectangle This value cannot be null.

Throws
IllegalArgumentException if start and end offset are in the different paragraph.

getFontMetricsInt

Added in API level 33
public void getFontMetricsInt (int start, 
                int end, 
                Paint.FontMetricsInt outMetrics)

Retrieves the text font metrics for the given range. Both start and end offset need to be in the same paragraph, otherwise IllegalArgumentException will be thrown.

Parameters
start int: the inclusive start offset in the text Value is 0 or greater

end int: the exclusive end offset in the text Value is 0 or greater

outMetrics Paint.FontMetricsInt: the output font metrics This value cannot be null.

Throws
IllegalArgumentException if start and end offset are in the different paragraph.

getParagraphCount

Added in API level 28
public int getParagraphCount ()

Returns the count of paragraphs.

Returns
int Value is 0 or greater

getParagraphEnd

Added in API level 28
public int getParagraphEnd (int paraIndex)

Returns the paragraph end offset of the text.

Parameters
paraIndex int: Value is 0 or greater

Returns
int Value is 0 or greater

getParagraphStart

Added in API level 28
public int getParagraphStart (int paraIndex)

Returns the paragraph start offset of the text.

Parameters
paraIndex int: Value is 0 or greater

Returns
int Value is 0 or greater

getParams

Added in API level 28
public PrecomputedText.Params getParams ()

Returns the layout parameters used to measure this text.

Returns
PrecomputedText.Params This value cannot be null.

getSpanEnd

Added in API level 28
public int getSpanEnd (Object tag)

Return the end of the range of text to which the specified markup object is attached, or -1 if the object is not attached.

Parameters
tag Object

Returns
int

getSpanFlags

Added in API level 28
public int getSpanFlags (Object tag)

Return the flags that were specified when Spannable#setSpan was used to attach the specified markup object, or 0 if the specified object has not been attached.

Parameters
tag Object

Returns
int

getSpanStart

Added in API level 28
public int getSpanStart (Object tag)

Return the beginning of the range of text to which the specified markup object is attached, or -1 if the object is not attached.

Parameters
tag Object

Returns
int

getSpans

Added in API level 28
public T[] getSpans (int start, 
                int end, 
                Class<T> type)

Return an array of the markup objects attached to the specified slice of this CharSequence and whose type is the specified type or a subclass of it. Specify Object.class for the type if you want all the objects regardless of type.

Parameters
start int

end int

type Class

Returns
T[]

getWidth

Added in API level 28
public float getWidth (int start, 
                int end)

Returns text width for the given range. Both start and end offset need to be in the same paragraph, otherwise IllegalArgumentException will be thrown.

Parameters
start int: the inclusive start offset in the text Value is 0 or greater

end int: the exclusive end offset in the text Value is 0 or greater

Returns
float the text width Value is 0 or greater

Throws
IllegalArgumentException if start and end offset are in the different paragraph.

length

Added in API level 28
public int length ()

Returns the length of this character sequence. The length is the number of 16-bit chars in the sequence.

Returns
int the number of chars in this sequence

nextSpanTransition

Added in API level 28
public int nextSpanTransition (int start, 
                int limit, 
                Class<T> type)

Return the first offset greater than start where a markup object of class type begins or ends, or limit if there are no starts or ends greater than start but less than limit. Specify null or Object.class for the type if you want every transition regardless of type.

Parameters
start int

limit int

type Class

Returns
int

removeSpan

Added in API level 28
public void removeSpan (Object what)

Remove the specified object from the range of text to which it was attached, if any. It is OK to remove an object that was never attached in the first place.

Parameters
what Object

Throws
IllegalArgumentException if MetricAffectingSpan is specified.

setSpan

Added in API level 28
public void setSpan (Object what, 
                int start, 
                int end, 
                int flags)

Attach the specified markup object to the range start…end of the text, or move the object to that range if it was already attached elsewhere. See Spanned for an explanation of what the flags mean. The object can be one that has meaning only within your application, or it can be one that the text system will use to affect text display or behavior. Some noteworthy ones are the subclasses of CharacterStyle and ParagraphStyle, and TextWatcher and SpanWatcher.

Parameters
what Object

start int

end int

flags int

Throws
IllegalArgumentException if MetricAffectingSpan is specified.

subSequence

Added in API level 28
public CharSequence subSequence (int start, 
                int end)

Returns a CharSequence that is a subsequence of this sequence. The subsequence starts with the char value at the specified index and ends with the char value at index end - 1. The length (in chars) of the returned sequence is end - start, so if start == end then an empty sequence is returned.

Parameters
start int: the start index, inclusive

end int: the end index, exclusive

Returns
CharSequence the specified subsequence

toString

Added in API level 28
public String toString ()

Returns a string representation of the object.

Returns
String a string representation of the object.