Implement Appendable and CharSequence in SpannableBuilder
This commit is contained in:
parent
1bad514714
commit
359fd8699d
@ -14,11 +14,13 @@ import java.util.Iterator;
|
|||||||
* is using an array to store all the information about spans. So, a span that is added first
|
* is using an array to store all the information about spans. So, a span that is added first
|
||||||
* will be drawn first, which leads to subtle bugs (spans receive wrong `x` values when
|
* will be drawn first, which leads to subtle bugs (spans receive wrong `x` values when
|
||||||
* requested to draw itself)
|
* requested to draw itself)
|
||||||
|
* <p>
|
||||||
|
* since 2.0.0 implements Appendable and CharSequence
|
||||||
*
|
*
|
||||||
* @since 1.0.1
|
* @since 1.0.1
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"WeakerAccess", "unused"})
|
@SuppressWarnings({"WeakerAccess", "unused"})
|
||||||
public class SpannableBuilder {
|
public class SpannableBuilder implements Appendable, CharSequence {
|
||||||
|
|
||||||
// do not implement CharSequence (or any of Spanned interfaces)
|
// do not implement CharSequence (or any of Spanned interfaces)
|
||||||
|
|
||||||
@ -51,12 +53,14 @@ public class SpannableBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@Override
|
||||||
public SpannableBuilder append(char c) {
|
public SpannableBuilder append(char c) {
|
||||||
builder.append(c);
|
builder.append(c);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@Override
|
||||||
public SpannableBuilder append(@NonNull CharSequence cs) {
|
public SpannableBuilder append(@NonNull CharSequence cs) {
|
||||||
|
|
||||||
copySpans(length(), cs);
|
copySpans(length(), cs);
|
||||||
@ -66,6 +70,21 @@ public class SpannableBuilder {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 2.0.0 to follow Appendable interface
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public SpannableBuilder append(CharSequence csq, int start, int end) {
|
||||||
|
|
||||||
|
final CharSequence cs = csq.subSequence(start, end);
|
||||||
|
copySpans(length(), cs);
|
||||||
|
|
||||||
|
builder.append(cs.toString());
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public SpannableBuilder append(@NonNull CharSequence cs, @NonNull Object span) {
|
public SpannableBuilder append(@NonNull CharSequence cs, @NonNull Object span) {
|
||||||
final int length = length();
|
final int length = length();
|
||||||
@ -98,14 +117,24 @@ public class SpannableBuilder {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int length() {
|
public int length() {
|
||||||
return builder.length();
|
return builder.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public char charAt(int index) {
|
public char charAt(int index) {
|
||||||
return builder.charAt(index);
|
return builder.charAt(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 2.0.0 to follow CharSequence interface
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CharSequence subSequence(int start, int end) {
|
||||||
|
return builder.subSequence(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
public char lastChar() {
|
public char lastChar() {
|
||||||
return builder.charAt(length() - 1);
|
return builder.charAt(length() - 1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user