Để tô màu chữ,
ta có thể làm trong file xml.
android:textColor="#00F"
Cũng có thể
làm trong code.
TextView.setTextColor(Color.parseColor("#800080"));
Tuy nhiên, nếu
ta muốn tô màu cùng một đoạn chữ nhưng có các màu khác nhau, ta phải dùng lớp
SpannableString.
Giả sử ta muốn
từng đoạn trong một chuỗi có màu khác nhau, ta làm như sau.
String vao="Đây là
dòng chữ có nhiều màu";
SpannableString s = new
SpannableString(vao);
s.setSpan(new
ForegroundColorSpan(Color.RED), 0, 8, 0);
s.setSpan(new
ForegroundColorSpan(Color.parseColor("#008000")), 8, 15, 0);
s.setSpan(new
ForegroundColorSpan(Color.parseColor("#0000ff")), 16, 27, 0);
tv.setText(s);
Các ký tự sẽ
tùy theo vị trí ta đã đặt.
Tiếp theo, ta
có một chuỗi có nhiều dòng, ta muốn mỗi dòng có một màu. Thông thường ta phải
set mỗi dòng vào 1 textView rồi tô màu riêng của textView đó. Nhưng với lớp SpannableStringBuilder ta có thể làm ngay trong một textView.
Giả sử chuỗi
của ta có 7 dòng từ Thứ Hai đến Chủ Nhật, ta muốn set mỗi dòng một màu, chỉ
trong 1 textView duy nhất.
Ta sẽ hai báo
một mảng arraylist.
ArrayList<String> ar
= new ArrayList<String>();
Thêm các thứ
vào mảng.
Dùng lệnh for
duyệt mảng để set màu cho từng dòng.
SpannableString s1 = new
SpannableString("\n");
SpannableStringBuilder
builder = new SpannableStringBuilder();
for (int i = 0; i < ar.size(); i++) {
if (ar.get(i).equals("Thứ
Hai")) {
SpannableString redSpannable = new
SpannableString(ar.get(i));
redSpannable.setSpan(new
ForegroundColorSpan(Color.parseColor("#FF7F50")), 0, ar
.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
} else if (ar.get(i).equals("Thứ
Ba")) {
SpannableString redSpannable = new
SpannableString(ar.get(i));
redSpannable.setSpan(new
ForegroundColorSpan(Color.parseColor("#0000ff")),
0,
ar.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
} else if (ar.get(i).equals("Thứ
Tư")) {
SpannableString redSpannable = new
SpannableString(ar.get(i));
redSpannable.setSpan(new
ForegroundColorSpan(Color.parseColor("#ff008000")),
0,
ar.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
} else if (ar.get(i).equals("Thứ
Năm")) {SpannableString redSpannable = new
SpannableString(ar.get(i));
redSpannable.setSpan(new ForegroundColorSpan(Color.parseColor("#800000")),
0,
ar.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
}
else if (ar.get(i).equals("Thứ
Sáu")) {
SpannableString
redSpannable = new SpannableString(ar.get(i));
redSpannable.setSpan(new
ForegroundColorSpan(Color.parseColor("#00FF00")),
0,
ar.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
}
else if (ar.get(i).equals("Thứ Bảy")) {
SpannableString redSpannable = new
SpannableString(ar.get(i));
redSpannable.setSpan(new
ForegroundColorSpan(Color.parseColor("#FF00FF")),
0,
ar.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
}
else {
SpannableString redSpannable = new
SpannableString(ar.get(i));
redSpannable.setSpan(new
ForegroundColorSpan(Color.RED), 0, ar
.get(i).length(),
0);
builder.append(redSpannable);
builder.append(s1);
}
}
builder.delete(builder.length()
- 1, builder.length());
tv2.setText(builder);
Kết quả chạy ra như sau.
No comments:
Post a Comment