2012-11-12 73 views

Trả lời

3

Khi tôi có văn bản được định dạng cần thiết trong quá khứ, tôi đã tạo một tệp html có định dạng, đặt nó trong thư mục res/raw và tải nó vào một WebView. Tôi đã không bao giờ thử nó với phông chữ khác nhau trước khi mặc dù vậy không chắc chắn nếu điều đó sẽ làm việc, nhưng đậm và in nghiêng, vv sẽ làm việc.

14

Sau khi đọc tiêu đề câu hỏi của bạn, tôi đã sẵn sàng cung cấp cho bạn liên kết đến bài viết chính xác đó. Tôi đã tìm thấy bằng cách sử dụng nhịp và SpannableString là khá mạnh mẽ. Cách thay thế sẽ là sử dụng định dạng HTML cho văn bản của bạn, có thể được thực hiện với Html.fromHtml().

Tuy nhiên, Nó không phải chính xác rõ ràng mà các thẻ HTML được hỗ trợ, kể từ khi tài liệu chỉ đơn giản là đọc:

Lớp này xử lý chuỗi HTML sang văn bản theo kiểu thể hiển thị. Không phải tất cả các thẻ HTML đều được hỗ trợ.

Vì vậy, để có giải pháp tốt, tôi chắc chắn sẽ đi theo phương pháp SpannableString trong bài viết. Phương pháp này rất tiện dụng trong thực tế vì bạn cũng có thể tạo các lớp span của riêng bạn để mở rộng các lớp hiện có (ví dụ: nếu bạn muốn có một phần văn bản sử dụng phông chữ tùy chỉnh không được tích hợp sẵn).

+0

Câu trả lời hay, SpannableString thực sự là công cụ mạnh mẽ cho việc này. Tôi đã được lấy cảm hứng từ lớp đó để tạo ra một thư viện RichTextView sử dụng SpannableString dưới mui xe nhưng đơn giản hóa việc sử dụng cho các nhà phát triển: http://stackoverflow.com/a/36404986/3131147 – AdamMc331

6

Tôi đã viết thư viện vào cuối tuần để xử lý việc này, tôi gọi nó là RichTextView.

Thư viện cho phép bạn định dạng một đoạn văn bản (in đậm, gạch dưới, in nghiêng, kết hợp, vv) cũng như tô màu (màu văn bản và đánh dấu). Trong bản phát hành tiếp theo, tôi dự định cho phép các phông chữ tùy chỉnh và như vậy.

Để sử dụng nó rất đơn giản, chỉ cần thêm sự phụ thuộc sau đây để tập gradle của bạn:

compile 'com.androidessence.lib:richtextview:1.0.1' 

Bây giờ, giả sử bạn muốn làm cho bốn nhân vật đầu tiên đậm, bạn chỉ có thể thực hiện cuộc gọi như sau:

myRichTextView.formatSpan(0, 4, RichTextView.FormatType.BOLD); 

Lưu ý rằng tham số chỉ mục kết thúc không được bao gồm, vì vậy bằng cách nói (0 -> 4) chúng tôi thực sự đang lập chỉ mục bolding (0 -> 3).

Nếu bạn muốn làm cả đậm và gạch dưới, sử dụng một EnumSet:

myRichTextView.formatSpan(0, 4, EnumSet.of(RichTextView.FormatType.BOLD, RichTextView.FormatType.UNDERLINE)); 

Đối với các thông tin mới nhất xin vui lòng xem kho Github liên kết ở trên, mặc dù tôi sẽ cố gắng cập nhật câu trả lời này bất cứ lúc nào nó trở nên lỗi thời.

+0

Đẹp! Đây sẽ là câu trả lời được chấp nhận. –

+0

Đó là đúng Tristan; lol – Eenvincible

+0

lib tuyệt vời, đơn giản hơn nhiều so với giải pháp khác. – Mauker

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