2013-01-26 11 views
6

Câu hỏi này là một theo dõi cho câu hỏi cuối cùng của tôi: How to highlight text like Android spell-checker?Cách đặt màu của UnderlineSpan?

Tôi đang sử dụng một UnderlineSpan để gạch dưới văn bản trong một EditText nhưng tôi cần gạch dưới là TRÊN COLOR như ảnh chụp màn hình này của kiểm tra chính tả:

enter image description here

+0

Đây có lẽ là tốt nhất mà bạn sẽ thực hiện: http : //stackoverflow.com/questions/7684560/change-the-color-of-the-underline-in-android ... Hoặc, có lẽ: http://stackoverflow.com/questions/13238298/android-change-underline -color-from-an-edittext-dynamic – Eric

+0

Cảm ơn bạn nhưng tiếc là giải pháp đầu tiên không hoạt động (cả hai câu trả lời) và tôi không thể sử dụng giải pháp thứ hai kể từ ứng dụng của tôi là một bàn phím không thể truy cập trực tiếp vào EditText. –

+0

Vấn đề là không có phương pháp hỗ trợ API để làm điều đó, ít nhất là không có trên Android chứng khoán. – Eric

Trả lời

2

Thật không may, bạn không thể làm được điều này chỉ với một Span - không có phương pháp nào để làm những gì bạn yêu cầu. Có một phương pháp để đặt màu gạch chân trong TextPaint độc lập với màu văn bản (bạn có thể thấy nó trong mã nguồn cho SuggestionSpan) nhưng it's hidden.

Nếu bạn có thể truy cập vào EditText, bạn có thể xử lý Span và vẽ gạch dưới chính mình, nhưng nếu không bạn sẽ không may mắn.

0

Đây là cách tôi đã làm cho nó hoạt động

Spanned part_1 = Html.fromHtml(getString(R.string.part1)); 
Spanned part_2 = Html.fromHtml("<u><font color='#2eb6f0'>Text in blue</font></u>"); 
Spanned part_3 = Html.fromHtml(getString(R.string.part3)); 
Spanned output = (Spanned) TextUtils.concat(part_1, part_2, part_3); 

textview.setText(output, TextView.BufferType.SPANNABLE); 
1

đây là chức năng mà bạn có thể sử dụng để thiết lập màu sắc của dòng bên dưới văn bản

public void addUnderLineLink(TextView mTextView) { 
    if (mTextView != null) { 
     SpannableString content = new SpannableString(mTextView.getText().toString()); 
     UnderlineSpan us=new UnderlineSpan(); 
     TextPaint tp=new TextPaint(); 
     tp.setColor(ContextCompat.getColor(getContext(),R.color.white)); 
     us.updateDrawState(tp); 
     content.setSpan(us, 0, mTextView.getText().toString().length(), 0); 
     mTextView.setText(content); 
    } 
}