2010-01-29 41 views
26

Tôi đang vật lộn với việc sử dụng đối tượng văn bản EditText và Spannable, Những ngày này, tôi đã đọc tài liệu API khoảng mười lần, thậm chí tôi không chắc chắn rằng tôi hiểu chính xác. Vì vậy, tôi đang tìm một loại ví dụ cho tôi thấy cách sử dụng EditText và Spannable.Có ví dụ nào về văn bản Spanned và Spannable

+5

http://www.chrisumbel.com/article/android_textview_rich_text_spannablestring Đây là câu trả lời hoàn hảo cho những ai muốn làm bất cứ điều gì với Spannable và Textveiw. – JehandadK

+0

Xem [tại đây] (http://stackoverflow.com/a/41953808/3681880) và [tại đây] (http://androidcocktail.blogspot.com/2014/03/android-spannablestring-example.html) để biết một số ví dụ . – Suragch

Trả lời

30

Vì bạn không chỉ định những gì bạn không thể nắm bắt từ API, thật khó để trả lời câu hỏi của bạn (câu trả lời ngắn: viết lại câu hỏi của bạn cho một câu hỏi cụ thể thay vì câu hỏi chung).

Một điển hình Spannable-ví dụ là một cái gì đó như thế này để chuyển văn bản được lựa chọn trong một EditText vào Nghiêng:

Spannable str = mBodyText.getText(); 
if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart()) 
    str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 
         mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
else 
    str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 
       mBodyText.getSelectionEnd(), 
       mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

này được cắt và dán từ cái gì khác, vì vậy trực pastability của bạn có thể đã phải chịu đựng, nhưng nó ít nhất cho thấy một ví dụ làm việc của một Spannable (trong trường hợp này là StyleSpan). Trong API, bạn có thể tìm thấy các loại Spans khác (đặc biệt là ImageSpan, đây là một câu hỏi phổ biến trong số những chiếc droid mới được chuyển đổi).

+0

Câu trả lời này rất hữu ích cho tôi, Cảm ơn. Nhưng tôi vẫn còn một loạt vấn đề, tôi phải giải quyết. Như bạn đã mô tả ở trên, đây là một liên kết để hiển thị vấn đề mà tôi đã gặp phải. http://stackoverflow.com/questions/2093111/when-some-text-is-copied-and-pasted-pasted-text-inherit-previous-text-style-it Nếu bạn cần thêm chi tiết về sự cố, đây là một liên kết khác. http://code.google.com/p/blogaway/issues/detail?id=32 Có thể, liên kết ở trên có nhiều thông tin hơn để tìm ra vấn đề là gì. – skysign

+0

Trong khi mục đích của 'SpannableString' là khá rõ ràng, một ví dụ về' SpannedString' sẽ rất hữu ích, vì nó là hoàn toàn không rõ ràng với tôi những gì để sử dụng nó cho và làm thế nào để tạo ra nó ở nơi đầu tiên. – AndreKR

9

Tôi chỉ mới bắt đầu cố gắng tìm ra nó, và có vẻ như không cần thiết phức tạp.

Đây là phương pháp làm việc để thêm văn bản có thể kéo dài mới vào chế độ xem hiện tại. Tôi muốn thêm văn bản màu vào một khung nhìn, và điều này dường như là cách duy nhất để làm điều đó.

Mặc dù nó cảm thấy như một hack xấu xí, bạn có thể tạo TextView giả (không hiển thị ở bất kỳ đâu) và tạo kiểu văn bản ở đó, sau đó nối văn bản theo kiểu đó vào bất cứ nơi nào bạn muốn. Tín dụng cho nó đi đến iifuzz tại anddev.org. Mã của tôi trông giống như vậy:

spanbuffer = new TextView(context); 
    spanbuffer.setText(newText, TextView.BufferType.SPANNABLE); 
    Spannable s = (Spannable) spanbuffer.getText(); 
    s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0); 
    this.append(s); 

Tôi nghĩ rằng bạn đang nghĩ để có thể tạo ra văn bản spannable mới sử dụng SpannableFactory, như vậy:

Spannable s = Spannable.Factory.getInstance().newSpannable(newText); 

nhưng tôi không thể nhận được văn bản này để thực sự cho thấy hiệu ứng span mới, vì vậy tôi đã từ bỏ.