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

int SPAN_COMPOSING

This flag is set on spans that are being used to apply temporary styling information on the composing text of an input method, so that they can be found and removed when the composing text is being replaced.

int SPAN_EXCLUSIVE_EXCLUSIVE

Spans of type SPAN_EXCLUSIVE_EXCLUSIVE do not expand to include text inserted at either their starting or ending point.

int SPAN_EXCLUSIVE_INCLUSIVE

Non-0-length spans of type SPAN_EXCLUSIVE_INCLUSIVE expand to include text inserted at their ending point but not at their starting point.

int SPAN_INCLUSIVE_EXCLUSIVE

Non-0-length spans of type SPAN_INCLUSIVE_EXCLUSIVE expand to include text inserted at their starting point but not at their ending point.

int SPAN_INCLUSIVE_INCLUSIVE

Spans of type SPAN_INCLUSIVE_INCLUSIVE expand to include text inserted at either their starting or ending point.

int SPAN_INTERMEDIATE

This flag will be set for intermediate span changes, meaning there is guaranteed to be another change following it.

int SPAN_MARK_MARK

0-length spans with type SPAN_MARK_MARK behave like text marks: they remain at their original offset when text is inserted at that offset.

int SPAN_MARK_POINT

SPAN_MARK_POINT is a synonym for SPAN_INCLUSIVE_INCLUSIVE.

int SPAN_PARAGRAPH

SPAN_PARAGRAPH behaves like SPAN_INCLUSIVE_EXCLUSIVE (SPAN_MARK_MARK), except that if either end of the span is at the end of the buffer, that end behaves like _POINT instead (so SPAN_INCLUSIVE_INCLUSIVE if it starts in the middle and ends at the end, or SPAN_EXCLUSIVE_INCLUSIVE if it both starts and ends at the end).

int SPAN_POINT_MARK

SPAN_POINT_MARK is a synonym for SPAN_EXCLUSIVE_EXCLUSIVE.

int SPAN_POINT_MARK_MASK

Bitmask of bits that are relevent for controlling point/mark behavior of spans.

int SPAN_POINT_POINT

0-length spans with type SPAN_POINT_POINT behave like cursors: they are pushed forward by the length of the insertion when text is inserted at their offset.

int SPAN_PRIORITY

The bits specified by the SPAN_PRIORITY bitmap determine the order of change notifications -- higher numbers go first.

int SPAN_PRIORITY_SHIFT

The bits numbered just above SPAN_PRIORITY_SHIFT determine the order of change notifications -- higher numbers go first.

int SPAN_USER

The bits specified by the SPAN_USER bitfield are available for callers to use to store scalar data associated with their span object.

int SPAN_USER_SHIFT

The bits numbered SPAN_USER_SHIFT and above are available for callers to use to store scalar data associated with their span object.

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

Object clone()

Creates and returns a copy of this object.

boolean equals(Object obj)

Indicates whether some other object is "equal to" this one.

void finalize()

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

final Class<?> getClass()

Returns the runtime class of this Object.

int hashCode()

Returns a hash code value for the object.

final void notify()

Wakes up a single thread that is waiting on this object's monitor.

final void notifyAll()

Wakes up all threads that are waiting on this object's monitor.

String toString()

Returns a string representation of the object.

final void wait(long timeoutMillis, int nanos)

Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

final void wait(long timeoutMillis)

Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

final void wait()

Causes the current thread to wait until it is awakened, typically by being notified or interrupted.

abstract void removeSpan(Object what)

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

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

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

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

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

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

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

abstract char charAt(int index)

Returns the char value at the specified index.

default IntStream chars()

Returns a stream of int zero-extending the char values from this sequence.

default IntStream codePoints()

Returns a stream of code point values from this sequence.

static int compare(CharSequence cs1, CharSequence cs2)

Compares two CharSequence instances lexicographically.

default boolean isEmpty()

Returns true if this character sequence is empty.

abstract int length()

Returns the length of this character sequence.

abstract CharSequence subSequence(int start, int end)

Returns a CharSequence that is a subsequence of this sequence.

abstract String toString()

Returns a string containing the characters in this sequence in the same order as this sequence.

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.

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

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

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.