2011-01-12 45 views
6

Tôi muốn làm cho TextView được gạch chân hoàn toàn nhưng tôi không thể sử dụng tài nguyên văn bản và thẻ <u> vì đó là văn bản động.Android: Văn bản động tĩnh dưới dạng tĩnh trong TextView

liên quan: Can I underline text in an android layout?

Cho đến nay cách duy nhất mà tôi biết để làm điều này là khi chạy. Đây có phải là cách duy nhất không? Có cách nào tôi có thể làm điều đó trong các tập tin XML?

Trả lời

18

Giải pháp đơn giản nhất có lẽ là để tạo ra một thành phần tùy chỉnh UnderLineTextView bắt nguồn từ TextView, ghi đè setText() và thiết lập toàn bộ văn bản như gạch chân, một cái gì đó như thế này (mã gạch dưới từ liên kết mà bạn đã đề cập ở trên):

@Override 
public void setText(CharSequence text, BufferType type) { 
    // code to check text for null omitted 
    SpannableString content = new SpannableString(text); 
    content.setSpan(new UnderlineSpan(), 0, text.length(), 0); 
    super.setText(content, BufferType.SPANNABLE); 

} 

Sau đó chỉ là một ma tter sử dụng thành phần mới của bạn trong bố trí và thiết lập văn bản như bình thường. Phần còn lại được xử lý tự động.

Thông tin thêm về các thành phần tùy chỉnh: http://developer.android.com/guide/topics/ui/custom-components.html

14

Bạn có thể gạch dưới văn bản trên Html.fromHtml(String source)

Ví dụ:

textView.setText(Html.fromHtml("this is <u>underlined</u> text")); 
+0

Giải pháp đơn giản nhất IMHO. – gnac

+0

Điều này sẽ không hoạt động vì không mở được khung mở của các thẻ '' và ''. Ví dụ thích hợp, vui lòng xem http://stackoverflow.com/a/9955051/425183 – Ognyan

+0

thực sự Giải pháp đơn giản nhất, txs – Hubert

1

Bạn cũng có thể làm được điều này thông qua các tập tin /res/values/string.xml nếu bạn thích: Ví dụ, trong /res/values/string.xml bạn có thể thêm một mục như:

<string name="createAccount"><u>Create Account</u></string> 

Và sau đó trong phương thức onCreate (Bundle savedInstanceState) hoạt động của bạn, bạn sẽ thêm đoạn mã sau để gây "Tạo tài khoản"> để xuất hiện như nhấn mạnh trong giao diện người dùng mà bạn đã đặt cho TextView createAccountText mà bạn đã xác định trong tệp xml trong/res/layout/cho hoạt động của mình:

TextView createAccountText = (TextView) findViewById(R.id.createAccountText); 
Resources res = getResources(); 
CharSequence styledText = res.getText(R.string.createAccount); 
createAccountText.setText(styledText, TextView.BufferType.SPANNABLE); 

Danny Remington - MacroSolve

+0

getResources(). GetText() giải quyết được vấn đề của tôi, không biết tại sao với 'textView.setText (getResources () .getString (R.string.string_id)); 'văn bản không được gạch dưới. –

0

peter3 viết trước để mở rộng lớp TextView và chép đè phương thức setText.

Giải pháp này sẽ không hoạt động vì phương thức setText được đánh dấu là CUỐI CÙNG.

http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

Không chắc chắn mã có thể hoạt động với một số sửa đổi hay không.

+0

Phương pháp peter3 là trọng số trong câu trả lời của anh ta không phải là public void setText (văn bản CharSequence) nhưng public void setText (văn bản CharSequence, TextView.BufferType type). Phương pháp peter3 mô tả không phải là cuối cùng. (Một chút muộn để được thêm bình luận nhưng tôi cũng phải nhìn hai lần vì vậy nghĩ rằng nó đáng nói đến). – Stanley

0
SpannableString content = new SpannableString(name); 
content.setSpan(new UnderlineSpan(), 0, name.length(), 0); 
geometrical_textview.setText(content, TextView.BufferType.SPANNABLE); 
Các vấn đề liên quan