Android控制群組合應用五

來源:互聯網
上載者:User

接上一篇,現在ListView已經有了基本外觀,能夠顯示使用者名稱的微博內容了,接下來,我們來把URL和@符號以特殊的外觀顯示出來。

對於URL的顯示,我想大家都知道,就是把TextView的AutoLinkMask屬性進行設定,這樣不僅能把URL展示為連結,還可以正確的識別郵箱地址和電話號碼等連結。

那麼對於“@暱稱”這樣的形式,大家不妨試一下,僅僅通過設定AutoLinkMask是不夠的,是不能被識別出來的。因為這顯示不在它能自動識別的連結的格式之內。

那麼如何處理這個元素呢?

我們可以分兩步來考慮,一是識別這種形態,另一是用特殊的顏色表現出來。

首先是識別,這裡我用最簡單的辦法進行了識別的過程,即找到‘@’符號,再向後在一定範圍內找到‘:’或‘ ’,然後這中間的字元即是識別出來的部分。只是示範,顯然不能涵蓋所有的情況。

然後是表現,如果想在TextView中對部分文字使用特別的顏色,最便捷的方式就是使用HTML元素,即通過為其添加<Font>標籤來影響Android的渲染。

這兩步都有瞭解決思路,開始編碼吧。

從TextView繼承一個子類BlogTextView,改寫其中的setText()方法,對設定進來的文本進行儲存,然後識別出其中的“@暱稱”形式,識別好以後為其加入<Font>標籤,再利用基類的SetText()方法進行處理,當然,也不能忘了為其開啟AutoLinkMask,還有改寫getText()方法,返回類中儲存的原始文本資訊。代碼如下:

 package com.wenbin.test;</p><p>import java.util.Map;<br />import java.util.Set;</p><p>import android.content.Context;<br />import android.graphics.drawable.Drawable;<br />import android.text.Html;<br />import android.text.Html.ImageGetter;<br />import android.text.util.Linkify;<br />import android.util.AttributeSet;<br />import android.widget.TextView;</p><p>public class BlogTextView extends TextView {<br />private static final int NAMELENGTH=15; //假設暱稱不超過15個字元<br />private CharSequence text;</p><p>public BlogTextView(Context context) {<br />super(context);<br />setAutoLinkMask(Linkify.ALL);<br />}</p><p>public BlogTextView(Context context, AttributeSet attrs) {<br />super(context, attrs);<br />setAutoLinkMask(Linkify.ALL);<br />}</p><p>public BlogTextView(Context context, AttributeSet attrs, int defStyle) {<br />super(context, attrs, defStyle);<br />setAutoLinkMask(Linkify.ALL);<br />}</p><p>@Override<br />public CharSequence getText() {<br />return text==null?"":text;<br />}</p><p>@Override<br />public void setText(CharSequence text, BufferType type) {<br />this.text=text;</p><p>String cs=text.toString();<br />String font1="<font color=#339966>";<br />String font2="</font>";</p><p>//找以'@'開頭以':'或' '結尾的子串,將其使用font標記進行修飾<br />int start=0;<br />while(true){<br />start=cs.indexOf('@',start);<br />if (start<cs.length() && start>=0){<br />int end=cs.indexOf(' ',start);<br />if (end<cs.length() && end>0 && end-start<=NAMELENGTH){<br />CharSequence subcs=new String(cs.subSequence(start, end).toString());<br />cs=cs.replace(subcs,font1+subcs+font2 );<br />start+=font1.length()+subcs.length()+font2.length();<br />}<br />else{<br />end=cs.indexOf(':',start);<br />if (end<cs.length() && end>0 && end-start<=NAMELENGTH){<br />CharSequence subcs=new String(cs.subSequence(start, end).toString());<br />cs=cs.replace(subcs,font1+subcs+font2 );<br />start+=font1.length()+subcs.length()+font2.length();<br />}<br />}<br />start+=1;<br />}<br />else{<br />break;<br />}<br />}</p><p>super.setText(Html.fromHtml(cs), type);<br />}<br />}<br />

寫完以後,把資源檔blogview.xml中id為blogText和reBlogText的TextView改為com.wenbin.test.BlogTextView,這是使用自訂控制項的方法。代碼片斷如下:

  <com.wenbin.test.BlogTextView android:id="@+id/blogText" android:layout_height="wrap_content"<br /> android:layout_below="@+id/userName"<br /> android:textColor="@color/black"<br /> android:textSize="15sp" android:layout_width="wrap_content"><br /> </com.wenbin.test.BlogTextView>

 

運行程式,效果如所示:

 

——歡迎轉載,請註明出處 http://blog.csdn.net/caowenbin ——

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.