歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 單個TextView中文字顏色,超鏈接等效果的設置

一般在一個TextView中的字體顏色,效果都是統一的。

如果一段文字,前幾個文字要顯示高亮,中間部分一個超鏈接,後半部分自定義顏色。

簡單點可能直接用3個textView來表示了。

因為上次做一個彩票的軟件,對於雙色球來說,大家都知道。

雙色,那就有兩種顏色。


很顯然,這個效果,最後需要在一個TextView中完成。(當然也可以2個,紅色和藍色分開)。

然後我們第一反應是想到一個SpannableString這個類。

以下是網上copy過來一段代碼:

[java]
  1. //創建一個 SpannableString對象     
  2.       SpannableString sp = new SpannableString("這句話中有百度超鏈接,有高亮顯示,這樣,或者這樣,還有斜體.");    
  3.       //設置超鏈接     
  4.       sp.setSpan(new URLSpan("http://www.baidu.com"), 57,    
  5.               Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    
  6.       //設置高亮樣式一     
  7.       sp.setSpan(new BackgroundColorSpan(Color.RED), 17 ,19,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  8.       //設置高亮樣式二     
  9.       sp.setSpan(new ForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);      
  10.       //設置斜體     
  11.       sp.setSpan(new StyleSpan(Android.graphics.Typeface.BOLD_ITALIC), 2729, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);    
  12.       //SpannableString對象設置給TextView     
  13.       myTextView.setText(sp);    
  14.       //設置TextView可點擊     
  15.       myTextView.setClickable(true);  
  16.       myTextView.setMovementMethod(LinkMovementMethod.getInstance());    

恩。一個不錯的解決方式。

但是後來發現一個問題。

在對於SpannableString對象做整體操作時,我們對於裡面的要設置的部分文字都是以截取方式,因此,也就是我們在構造這個

對象然後操作時,對於構造進去的String內容都是事先知道了。 那我這個開獎號碼:雙色球是7個數字,其他的就不一定了。而且還有一個問題,文字中我是帶有空格的, 這使得在setxx對於索引起始位置定位比較困難。
後面了解了一個新方式:Html.fromHtml(); 直接把文字組裝成html文本。 代碼: [java]
  1.               String redNums = nums[0].replace(","" ");  
  2. String blueNums = nums[1].replace(","" ");  
  3. StringBuilder  sb = new StringBuilder();  
  4. sb.append("</font>");  
  5. sb.append("<font color='#ff00ff'>");  
  6. sb.append(redNums);  
  7. sb.append("</font>");  
  8. sb.append(" ");  
  9. sb.append("</font>");  
  10. sb.append("<font color='#0000cc'>");  
  11. sb.append(blueNums);  
  12. sb.append(" ");  
  13. sb.append("</font>");  
  14. Spanned spanned = Html.fromHtml(sb.toString());  
  15. preNumView.setText(spanned);  
效果就是上圖那樣的顯示。
當然最後發現其實用SpannableString也能實現: 我構造兩個SpannableString,一個紅球,一個籃球的。 然後StringBuider組裝下。適合在構造的SpannableString不是太多的情況下挺好的。
Html.fromHtml()這個api適合搞過網頁開發的用戶。本人沒做過前端。對於幾個標簽都不是很熟悉。 而且適合設置大篇幅的版面文字,圖片等資源。
Copyright © Linux教程網 All Rights Reserved