5

Tôi hơi bối rối về 'quy tắc' khi một phần tử TextView hiển thị văn bản ở dạng được định dạng hay không.Định dạng HTML cho TextView

Một chuỗi như

"There are <i>different ways</i> of coding.\n"; 

màn hình mà không cần bất kỳ định dạng (bao gồm cả các mã HTML) khi tôi mã

tvMyTextView.setText("There are <i>different ways</i> of coding.\n"); 

nhưng khi tôi xác định cùng một chuỗi trong strings.xml và sau đó tải

tvMyTextView.setText(R.strings.TestString); 

nó hiển thị được nhấn mạnh.

Thậm chí bối rối tôi càng cảm thấy khi cố gắng để nhúng URL trong TextView của như ở đây:

"Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n"; 

Không cần phải nói rằng tôi đã thử các tùy chọn tài sản khác nhau của TextView - nhưng họ dường như không làm cho nhiều sự sự khác biệt trừ khi tôi bỏ lỡ điều gì đó. Trong một số trường hợp, URL được mã hóa trong văn bản, có màu xanh lam và có thể được nhấp vào, trong các trường hợp khác, tôi có thể thấy định dạng HTML. Trong những người khác một lần nữa, nó được mã hóa màu và URL dường như được mã hóa trong văn bản bằng cách nào đó - nhưng không có gì xảy ra khi tôi nhấp vào nó. Về việc nhúng URL, không giống như ví dụ khác với định dạng HTML 'đơn giản', tôi thậm chí không thể tìm ra quy tắc cho đến khi nó hoạt động và khi nào nó không hoạt động. bất cứ ai có thể giúp tôi để tháo gỡ những nút thắt trong đầu tôi ..

+0

thử MAC

Trả lời

5

Trên thực tế, Từ Android Documents ..

public final void setText (CharSequence text) 

Thiết lập giá trị chuỗi của TextView. TextView không chấp nhận định dạng giống như HTML, mà bạn có thể thực hiện với các chuỗi văn bản trong các tệp tài nguyên XML. Để tạo kiểu cho chuỗi của bạn, hãy gắn các đối tượng android.text.style. * Vào SpannableString hoặc xem tài liệu Các loại tài nguyên có sẵn để biết ví dụ về cách đặt văn bản được định dạng trong tệp tài nguyên XML.

Nhưng,

public final void setText (int resid) 
  • không đặc tả thêm về nó ..

Nhưng từ docs Android Resource Chuỗi ..

Bạn có thể thêm phong cách cho chuỗi của bạn với HTML markup . Ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="welcome">Welcome to <b>Android</b>!</string> 
</resources> 

phần tử HTML được hỗ trợ bao gồm:

<b> for bold text. 
<i> for italic text. 
<u> for underline text. 

Đôi khi bạn có thể muốn tạo một tài nguyên văn bản theo kiểu đó cũng được sử dụng như là một chuỗi định dạng.Thông thường, điều này sẽ không hoạt động vì phương thức String.format(String, Object...) sẽ loại bỏ tất cả thông tin kiểu khỏi chuỗi. Công việc xung quanh vấn đề này là viết các thẻ HTML với các thực thể thoát, sau đó được phục hồi với fromHtml(String), sau khi định dạng diễn ra.

Và về chuỗi URL của bạn, ...

tvMyTextView.setText(Html.fromHtml("Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n")); 

Ngoài ra nhìn vào câu hỏi này SO Set TextView text from html-formatted string resource in XML

Android String Resource

0

Để thêm một vài lưu ý cho những câu hỏi của riêng tôi và sau khi nhận được câu trả lời cho đến nay, tôi chỉ có thể kết luận rằng dường như không phải là một cách đáng tin cậy hoạt động ở khắp mọi nơi. Trong một số trường hợp - theo kinh nghiệm của tôi, nếu một URL được định dạng là một phần của văn bản thuần túy và không kèm theo các thẻ (như http://www.poon-world.com, thậm chí chỉ "Poon-World.com" dường như hoạt động trong hầu hết các trường hợp), chỉ đơn giản là thiết lập các thuộc tính của TextView có vẻ là đủ và các liên kết sẽ có thể nhấp được. Tuy nhiên, nếu các liên kết được nhúng trong các thẻ HTML và được cho là có thể nhấp từ một số văn bản liên kết, có vẻ như không có cách nào khác ngoài việc đi với Html.fromHtml (..).

Nhưng cũng có một số trường hợp đặc biệt tôi không thể giải thích: trong một số hoạt động/bố cục, tôi đang sử dụng URL "được nhúng" và đã đặt thuộc tính Nhấp được đề cập trước đó, không sử dụng Html.fromHtml .. và ngạc nhiên !, một nhấp chuột vào các liên kết thực sự tạo ra trong văn bản thực sự mở trình duyệt, nhưng chỉ sau khi đã thêm vào dòng sau trong mã trong OnCreate-sự kiện:

myTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

(tôi thấy thủ thuật này trong một thread, nhờ tác giả) Không có ý tưởng tại sao, nó có vẻ là cách các tài nguyên chuỗi được phân tích và đánh giá bởi Android. Tôi chỉ đề cập rằng trên tất cả những gì đã được nói để mọi người khác tìm kiếm giải pháp và bị lẫn lộn không bắt đầu nghĩ rằng anh ấy bắt đầu mất trí - không, chỉ cần kiểm tra các phương pháp được đề cập ở đây trên trang này và thường tập thể dục.

Các vấn đề liên quan