SpannableBuilder setSpans allow array of arrays
This commit is contained in:
parent
947f57d0eb
commit
ad284c756b
@ -38,13 +38,9 @@ public class SpannableBuilder implements Appendable, CharSequence {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spans.getClass().isArray()) {
|
// @since 3.0.1-SNAPSHOT we introduce another method that recursively applies spans
|
||||||
for (Object o : ((Object[]) spans)) {
|
// allowing array of arrays (and more)
|
||||||
builder.setSpan(o, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
setSpansInternal(builder, spans, start, end);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
builder.setSpan(spans, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,4 +402,24 @@ public class SpannableBuilder implements Appendable, CharSequence {
|
|||||||
super(text);
|
super(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 3.0.1-SNAPSHOT
|
||||||
|
*/
|
||||||
|
private static void setSpansInternal(
|
||||||
|
@NonNull SpannableBuilder builder,
|
||||||
|
@Nullable Object spans,
|
||||||
|
int start,
|
||||||
|
int end) {
|
||||||
|
if (spans != null) {
|
||||||
|
if (spans.getClass().isArray()) {
|
||||||
|
for (Object o : ((Object[]) spans)) {
|
||||||
|
// @since 3.0.1-SNAPSHOT recursively apply spans (allow array of arrays)
|
||||||
|
setSpansInternal(builder, o, start, end);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
builder.setSpan(spans, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -224,22 +224,30 @@ public class SpannableBuilderTest {
|
|||||||
|
|
||||||
assertTrue(builder.getSpans(0, builder.length()).isEmpty());
|
assertTrue(builder.getSpans(0, builder.length()).isEmpty());
|
||||||
|
|
||||||
|
final Object[] flatSpans = {
|
||||||
|
new Object(),
|
||||||
|
new Object(),
|
||||||
|
new Object(),
|
||||||
|
new Object(),
|
||||||
|
new Object()
|
||||||
|
};
|
||||||
|
|
||||||
final Object[] spans = {
|
final Object[] spans = {
|
||||||
new Object[]{
|
new Object[]{
|
||||||
new Object(), new Object()
|
flatSpans[0], flatSpans[1]
|
||||||
},
|
},
|
||||||
new Object[]{
|
new Object[]{
|
||||||
new Object(), new Object(), new Object()
|
flatSpans[2], flatSpans[3], flatSpans[4]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
setSpans(builder, spans, 0, 1);
|
setSpans(builder, spans, 0, 1);
|
||||||
|
|
||||||
final List<SpannableBuilder.Span> actual = builder.getSpans(0, builder.length());
|
final List<SpannableBuilder.Span> actual = builder.getSpans(0, builder.length());
|
||||||
assertEquals(2, actual.size());
|
assertEquals(flatSpans.length, actual.size());
|
||||||
|
|
||||||
for (int i = 0, length = spans.length; i < length; i++) {
|
for (int i = 0, length = spans.length; i < length; i++) {
|
||||||
assertEquals(spans[i], actual.get(i).what);
|
assertEquals(flatSpans[i], actual.get(i).what);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user