Package icyllis.modernui.text.style
Class DynamicDrawableSpan
java.lang.Object
icyllis.modernui.text.style.CharacterStyle
icyllis.modernui.text.style.MetricAffectingSpan
icyllis.modernui.text.style.ReplacementSpan
icyllis.modernui.text.style.DynamicDrawableSpan
- All Implemented Interfaces:
UpdateAppearance
,UpdateLayout
- Direct Known Subclasses:
ImageSpan
Span that replaces the text it's attached to with a Replacing text with a drawable.
Drawable
that can be aligned with
the bottom or with the baseline of the surrounding text.
For an implementation that constructs the drawable from various sources (Bitmap
,
Drawable
, resource id or Uri
) use ImageSpan
.
A simple implementation of DynamicDrawableSpan
that uses drawables from resources
looks like this:
class MyDynamicDrawableSpan extends DynamicDrawableSpan { private final Context mContext; private final int mResourceId; public MyDynamicDrawableSpan(Context context, @DrawableRes int resourceId) { mContext = context; mResourceId = resourceId; } @Override public Drawable getDrawable() { Drawable drawable = mContext.getDrawable(mResourceId); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } }The class can be used like this:
SpannableString string = new SpannableString("Text with a drawable span"); string.setSpan(new MyDynamicDrawableSpan(context, R.mipmap.ic_launcher), 12, 20, Spanned .SPAN_EXCLUSIVE_EXCLUSIVE);
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic @interface
Defines acceptable alignment types. -
Field Summary
Modifier and TypeFieldDescriptionstatic final int
A constant indicating that the bottom of this span should be aligned with the baseline of the surrounding text.static final int
A constant indicating that the bottom of this span should be aligned with the bottom of the surrounding text, i.e., at the same level as the lowest descender in the text.static final int
A constant indicating that this span should be vertically centered between the top and the lowest descender.protected final int
-
Constructor Summary
ModifierConstructorDescriptionCreates aDynamicDrawableSpan
.protected
DynamicDrawableSpan
(int verticalAlignment) Creates aDynamicDrawableSpan
based on a vertical alignment.\ -
Method Summary
Modifier and TypeMethodDescriptionvoid
draw
(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, TextPaint paint) Draws the span into the canvas.abstract Drawable
Your subclass must implement this method to provide the bitmap to be drawn.int
getSize
(TextPaint paint, CharSequence text, int start, int end, FontMetricsInt fm) Returns the width of the span.int
Methods inherited from class icyllis.modernui.text.style.ReplacementSpan
updateMeasureState
Methods inherited from class icyllis.modernui.text.style.MetricAffectingSpan
getUnderlying, updateDrawState
Methods inherited from class icyllis.modernui.text.style.CharacterStyle
wrap
-
Field Details
-
ALIGN_BOTTOM
public static final int ALIGN_BOTTOMA constant indicating that the bottom of this span should be aligned with the bottom of the surrounding text, i.e., at the same level as the lowest descender in the text.- See Also:
-
ALIGN_BASELINE
public static final int ALIGN_BASELINEA constant indicating that the bottom of this span should be aligned with the baseline of the surrounding text.- See Also:
-
ALIGN_CENTER
public static final int ALIGN_CENTERA constant indicating that this span should be vertically centered between the top and the lowest descender.- See Also:
-
mVerticalAlignment
protected final int mVerticalAlignment
-
-
Constructor Details
-
DynamicDrawableSpan
public DynamicDrawableSpan()Creates aDynamicDrawableSpan
. The default vertical alignment isALIGN_BOTTOM
-
DynamicDrawableSpan
protected DynamicDrawableSpan(int verticalAlignment) Creates aDynamicDrawableSpan
based on a vertical alignment.\- Parameters:
verticalAlignment
- one ofALIGN_BOTTOM
,ALIGN_BASELINE
orALIGN_CENTER
-
-
Method Details
-
getVerticalAlignment
public int getVerticalAlignment() -
getDrawable
Your subclass must implement this method to provide the bitmap to be drawn. The dimensions of the bitmap must be the same from each call to the next. -
getSize
public int getSize(@Nonnull TextPaint paint, CharSequence text, int start, int end, @Nullable FontMetricsInt fm) Description copied from class:ReplacementSpan
Returns the width of the span. Extending classes can set the height of the span by updating attributes ofFontMetricsInt
. If the span covers the whole text, and the height is not set,ReplacementSpan.draw(Canvas, CharSequence, int, int, float, int, int, int, TextPaint)
will not be called for the span.- Specified by:
getSize
in classReplacementSpan
- Parameters:
paint
- Paint instance.text
- Current text.start
- Start character index for span.end
- End character index for span.fm
- Font metrics, can be null.- Returns:
- Width of the span.
-
draw
public void draw(@Nonnull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @Nonnull TextPaint paint) Description copied from class:ReplacementSpan
Draws the span into the canvas.- Specified by:
draw
in classReplacementSpan
- Parameters:
canvas
- Canvas into which the span should be rendered.text
- Current text.start
- Start character index for span.end
- End character index for span.x
- Edge of the replacement closest to the leading margin.top
- Top of the line.y
- Baseline.bottom
- Bottom of the line.paint
- Paint instance.
-