gì những lá cờ không có nghĩa là
Khi tôi lần đầu tiên chứng kiến sự INCLUSIVE
và EXCLUSIVE
bộ phận của Spannable
cờ, tôi nghĩ họ chỉ nói hay không span bao gồm các vị trí bắt đầu và chỉ số cuối của nhịp. Đây không phải là sự thật. Hãy để tôi minh họa điều đó với ví dụ sau.
String myString = "";
int start = 1;
int end = 3;
int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
SpannableString spannableString = new SpannableString(myString);
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, start, end, spanFlag);
textView.setText(spannableString);
Dưới đây là kết quả:
SPAN_INCLUSIVE_INCLUSIVE
SPAN_INCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_INCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
tất cả Họ đều giống nhau! Những lá cờ không ảnh hưởng đến nhịp. Một khoảng luôn luôn bao gồm ký tự ở chỉ mục bắt đầu và loại trừ ký tự ở chỉ mục kết thúc.
gì cờ thực sự có nghĩa
Các INCLUSIVE
và EXCLUSIVE
bộ phận của lá cờ Spannable thực sự nói hay không span nên bao gồm văn bản được chèn lúc bắt đầu hoặc kết thúc vị trí.
Dưới đây là ví dụ được sửa đổi để minh họa điều đó.
String myString = "";
int start = 1;
int end = 3;
int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
// set the span
SpannableStringBuilder spannableString = new SpannableStringBuilder(myString);
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, start, end, spanFlag);
// insert the text after the span has already been set
// (inserting at start index second so that end index doesn't get messed up)
spannableString.insert(end, "x");
spannableString.insert(start, "x");
textView.setText(spannableString);
Đây là kết quả sau khi chèn một x
ở cuối và bắt đầu chỉ số:
SPAN_INCLUSIVE_INCLUSIVE
SPAN_INCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_INCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
Ghi chú
- Hầu hết các câu trả lời này mô tả điều OP đã biết. Tôi chỉ thêm nó cho những vị khách tương lai như bản thân tôi, những người không biết những điều này.
- Trong ví dụ thứ hai, tôi phải sử dụng
SpannableStringBuilder
vì văn bản trong một SpannableString
là không thay đổi để bạn không thể chèn văn bản vào đó. Do đó, các cờ thường vô nghĩa đối với một số SpannableString
.Tuy nhiên, người ta có thể tưởng tượng một tình huống trong đó các nhịp từ một số SpannableString
được sao chép sang một số SpannableStringBuilder
hoặc Editable
và từ đó các cờ sẽ có ý nghĩa.
- See this answer cho sự khác biệt giữa
SpannableString
, SpannableStringBuilder
, Editable
và hơn thế nữa.
, câu trả lời hay. Bạn có thể giải thích các cờ được kéo dài khác không? Vui lòng xem http://stackoverflow.com/q/16392417/596555 – boiledwater