今天學習了TextView的進行載入HTML來顯示文字,圖片等資訊;
首先來看一個Textview的一個屬性android:autoLink 這個屬性來解析Textview的中的一些特殊字元例如:web,email,phone,map,..當還可以通過android:textColorLink來設定這些特殊字元的顏色;另外其他的屬性可以設定字型大小,顏色等等;雖然這些都可以實現所需要的功能,不過Google還提供了一個Html類來直接載入HTML代碼。一起來學習下。
(一):看下Html類的繼承圖:這是直接繼承了Object類:
這個類可以顯示Html代碼轉換成對應的text,但不是所有的HTML的標籤都支援。
Html主要有下面的方法:
1:public static Spanned fromHtml (String source)
這個方法是返回顯示的文本,但是如果遇到img標籤的話,android系統會直接會用一個預設的圖片放上去,等著我們自己去載入圖片,完成之後,把載入成功的圖片替代上去,
[java] <span style="font-size: 16px; "> _TextView
.setText(Html
.fromHtml("<b>江蘇</b><h1>南通</h1><font color='#00FF00'>海門</font>" +
"<img src='http://developer.android.com/assets/images/bg_logo.png'/>"));</span>
效果如下:
看右下角那個不能顯示的圖片,如何可以實現圖片顯示呢?那就下下面那個重載的fromHtml方法...
2:public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
①:這個重載方法中第二個參數是個ImageGetter介面 其中我們實現這個介面的一個public abstract Drawable getDrawable (String source)方法,這個方法來載入圖片,【注意:這是一定要調用setbounds()方法來設定圖片的大小】
[java] <span style="font-size: 18px; "> </span><span style="font-size: 16px; ">ImageGetter _ImageGetter = new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
if (source != null) {
BitmapDrawable _BitmapDrawable = (BitmapDrawable) getResources()
.getDrawable(R.drawable.tu);
_BitmapDrawable.setBounds(0, 0, 100, 100);
return _BitmapDrawable;
}
return null;
}
};</span>
<span style="font-size: 18px; "> </span><span style="font-size: 16px; ">ImageGetter _ImageGetter = new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
if (source != null) {
BitmapDrawable _BitmapDrawable = (BitmapDrawable) getResources()
.getDrawable(R.drawable.tu);
_BitmapDrawable.setBounds(0, 0, 100, 100);
return _BitmapDrawable;
}
return null;
}
};</span> 這裡為了簡便直接返回了資產庫中的圖片了:
②第三個參數是個TagHandler 介面,實現這個介面中的public abstract void handleTag (boolean opening, String tag, Editable output, XMLReader xmlReader)方法來解析標籤,尤其那些不是屬於HTML的中標籤,可以理解為自訂的。。。
[java] TagHandler _TagHandler = new Html.TagHandler() {
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
Toast.makeText(TestActivity.this, tag, 2000).show();
}
};
TagHandler _TagHandler = new Html.TagHandler() {
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
Toast.makeText(TestActivity.this, tag, 2000).show();
}
};
上面就直接返回了傳入的那段HTML代碼中所有的節點標籤
摘自 要做一個給力的程式員--學習之路