項目上有個需求:後臺想直接控制文字的格式樣式和添加圖片。像網頁一樣修改好了整個網頁通過接口給我,讓我顯示在消息提示框裏。
怎麼用TextView控件顯示帶有格式的文字,可否使用Html佈局?查了下Android 幫助文檔,其提供了android.text.Html類和Html.ImageGetter、Html.TagHandler接口。
其實本不打算寫這篇博文的,但看到網絡上關於此的文章,找了好多資料,文本顯示很簡單,就是這個圖就是加載不出來
我把代碼貼一下:
html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>強調</strong></p><p><em>斜體</em></p>"
+ "<p><a href=\"http://www.dreamdu.com/xhtml/\">超鏈接HTML入門</a>學習HTML!</p><p><font color=\"#aabb00\">顏色1"
+ "</p><p><font color=\"#00bbaa\">顏色2</p><h1>標題1</h1><h3>標題2</h3><h6>標題3</h6><p>大於>小於<</p><p>"
+ "下面是網絡圖片</p><img src=\"http://avatar.csdn.net/0/3/8/1_zhang957411207.jpg\"/></body></html>";
text = (TextView) findViewById(R.id.text_html);
text.setMovementMethod(ScrollingMovementMethod.getInstance());// 滾動
mImageGetter = new NetworkImageGetter();
text.setText(Html.fromHtml(html,mImageGetter , null ));
如果不顯示圖這樣就可以了:text.setText(Html.fromHtml(html));
圖片需要第二個參數
API: Html.fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler);
/**
* 網絡圖片
* @author Susie
*/
private final class NetworkImageGetter implements Html.ImageGetter{
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
// 封裝路徑
File file = new File(Environment.getExternalStorageDirectory(), picName);
// 判斷是否以http開頭
if(source.startsWith("http")) {
// 判斷路徑是否存在
if(file.exists()) {
// 存在即獲取drawable
drawable = Drawable.createFromPath(file.getAbsolutePath());
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
} else {
// 不存在即開啓異步任務加載網絡圖片
AsyncLoadNetworkPic networkPic = new AsyncLoadNetworkPic();
networkPic.execute(source);
}
}
return drawable;
}
}
圖片本地的名字:
/**網絡圖片name*/
private String picName = "networkPic.jpg";
先加載本地,如果本地沒有就開始下載。異步下載:
/**
* 加載網絡圖片異步類
* @author Susie
*/
private final class AsyncLoadNetworkPic extends AsyncTask<String, Integer, Void>{
@Override
protected Void doInBackground(String... params) {
// 加載網絡圖片
loadNetPic(params);
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// 當執行完成後再次爲其設置一次
text.setText(Html.fromHtml(html, mImageGetter, null));
}
/**加載網絡圖片*/
private void loadNetPic(String... params) {
String path = params[0];
File file = new File(Environment.getExternalStorageDirectory(), picName);
InputStream in = null;
FileOutputStream out = null;
try {
URL url = new URL(path);
HttpURLConnection connUrl = (HttpURLConnection) url.openConnection();
connUrl.setConnectTimeout(5000);
connUrl.setRequestMethod("GET");
if(connUrl.getResponseCode() == 200) {
in = connUrl.getInputStream();
out = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len;
while((len = in.read(buffer))!= -1){
out.write(buffer, 0, len);
}
} else {
Log.e("123", connUrl.getResponseCode() + "");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
成功加載:
希望能幫到你。。。。。。