Android開發技巧——TextView載入HTML的圖片及程式碼顯示問題
前幾天在做一個Gradle使用者指南的應用程式,使用的是TextView來載入HTML內容(至於為什麼不用WebView,我也沒有認真使用並比較過,也許以後會換吧),其中遇見了一些糾結的問題,所幸主要的問題都一一解決了。
下面說一下遇見的幾個問題及我的解決方法。
TextView非同步載入HTML中的圖片及圖文重疊
在TextView中載入HTML圖片,需要實現Html.ImageGetter介面,然後在public Drawable getDrawable(String source)中去獲取圖片。圖片獲取我是直接使用了ImageLoader,一來載入圖片省事,二來帶快取功能,正是我想要的。但是getDrawable方法是在主執行緒中呼叫的,且要求返回Drawable物件用於顯示,而我們是不能在主執行緒中進行網路訪問的,所以需要非同步載入。ImageLoader本身已經有非同步載入的功能,所以我們需要將它與getDrawable方法結合起來。這裡用的方法與百度上常見到的方法略有不同,因為百度上的方法在我這裡會有BUG,在第二次進入時圖片經常載入不出來。
首先,寫一個類繼承BitmapDrawable,程式碼如下:
package com.githang.gradledoc.chapter; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; /** * User: Geek_Soledad([email protected]) * Date: 2014-11-30 * Time: 00:09 * FIXME */ public class URLDrawable extends BitmapDrawable { protected Bitmap bitmap; @Override public void draw(Canvas canvas) { if (bitmap != null) { canvas.drawBitmap(bitmap, 0, 0, getPaint()); } } }
這個類用於在getDrawable中返回的物件。
然後寫一個類實現Html.ImageGetter介面,程式碼如下:
這裡的mTextView是我們要載入圖片的TextView物件。這裡我暫未對圖片做自適應螢幕的適配,做的比較簡單,只是把載入後的圖片設定到之前返回的URLDrawable物件中的urlDrawable去,然後呼叫mTextView.invalidate()方法更新介面。public class URLImageParser implements Html.ImageGetter { TextView mTextView; public URLImageParser(TextView textView) { this.mTextView = textView; } @Override public Drawable getDrawable(String source) { final URLDrawable urlDrawable = new URLDrawable(); Log.d("ChapterActivity", Consts.BASE_URL + source); ImageLoader.getInstance().loadImage(Consts.BASE_URL + source, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { urlDrawable.bitmap = loadedImage; urlDrawable.setBounds(0, 0, loadedImage.getWidth(), loadedImage.getHeight()); mTextView.invalidate(); mTextView.setText(mTextView.getText()); // 解決圖文重疊 } }); return urlDrawable; } }
但是這樣寫完之後,還有一個問題。儘管我們對urlDrawable呼叫了setBounds設定它的邊框,但是還是會出現圖片重疊的問題。需要重新設定一下mTextView的內容,如上面程式碼中的:
mTextView.setText(mTextView.getText());
設定HTML到TextView的程式碼如下:
mDocView.setText(Html.fromHtml(doc, new URLImageParser(mDocView), null));
顯示的程式碼格式全亂
TextView雖然可以顯示html,但許多標籤並不能支援。比如用於顯示程式碼的<pre>,<code>這些標籤。原本以為TagHandler可以解決這個問題,但是我在看了網上對TagHandler的用法介紹之後,發現這種用法並不能處理我遇見的這個問題,因為它只能處理解析到的標籤之前的內容,無法處理標籤之後的內容。好在我在設定HTML的內容到TextView之前是有用jsoup進行一些處理的,於是決定用jsoup進行處理。 處理方法很簡單,對<pre>裡的標籤,把換行符替換成<br/>,把空格替換成 ,程式碼如下: /**
* 處理程式碼顯示問題.
*
* @param chapter 章節內容的html元素。
*/
private void handlerPreTag(Element chapter) {
Elements preElems = chapter.select("pre");
for (Element elem : preElems) {
elem.html(elem.html().replaceAll("\n", "<br/>").replaceAll(" ", " "));
}
}
最後上兩張解決這個問題後的效果圖:
本文原創,轉載請註明出處:http://blog.csdn.net/maosidiaoxian/article/details/41673425
相關推薦
Android開發技巧——TextView載入HTML的圖片及程式碼顯示問題
前幾天在做一個Gradle使用者指南的應用程式,使用的是TextView來載入HTML內容(至於為什麼不用WebView,我也沒有認真使用並比較過,也許以後會換吧),其中遇見了一些糾結的問題,所幸主要的問題都一一解決了。 下面說一下遇見的幾個問題及我的解決方法。 TextV
Android TextView載入html圖片詳解
學Android的時候突然想到一個問題:怎麼用TextView控制元件顯示帶有格式的文字,可否使用Html佈局?查了下Android 幫助文件,其提供了android.text.Html類和Html.ImageGetter、Html.TagHandler介
android-Picasso請求https載入網路圖片不能顯示的解決方案
Picasso載入https的圖片載入不出來的解決方案 最近專案中有需求–要顯示https連結的圖片,但是配置好路徑後原生的Picasso死活沒法加載出圖片,最後在網上找到了如下的解決辦法 確認依賴 compile 'com.squareup.ok
android TextView 載入html 顯示圖片並且新增img標籤點選事件工具類 富文字 圖文混排 圖片大小調整
注意,本人部落格主要是為了自己記錄,如果有問題歡迎反饋哈。 android的TextView可以載入html程式碼,並且識別他們的標籤,用的方法就是setText(Html.fromHtml(source)),其中source是指定的字串,包含html標籤,用setText
android textView 載入HTML 非同步載入網路圖片
/** * 重寫圖片載入介面 * * @author Ruffian * @date 2016年1月15日 * */ class HtmlImageGetter implements Html.ImageGetter { /** * 獲取圖片 */ @Ov
Android開發技巧——定製仿微信圖片裁剪控制元件
拍照——裁剪,或者是選擇圖片——裁剪,是我們設定頭像或上傳圖片時經常需要的一組操作。上篇講了Camera的使用,這篇講一下我對圖片裁剪的實現。 背景 下面的需求都來自產品。 裁剪圖片要像微信那樣,拖動和放大的是圖片,裁剪框不動。 裁剪框外的內容要有半透
Android開發技巧——去掉TextView中autolink的下劃線
我們知道,在佈局檔案中設定textview的autolink及其型別,這時textivew上會顯示link的顏色,並且文字下面會有一條下劃線,表示可以點選。而在我們在點選textview時,應用將根據我們所設定的型別跳轉到對應的介面。但是有時,我們因介面需求,需要去掉介面上
android webview載入html圖片自適應手機螢幕大小&點選檢視大圖
我們在開發中,顯示資訊詳情時,一般後臺會給出html文字,在Android端一般採用webview控制元件來展示,但是後臺給出的html文字一般是給電腦端用的,沒有自適配手機,導致手機端圖片顯示過大,需要左右移動來檢視全圖。下面給出幾種實用方法,達到在手機端用webvi
【iOS開發】UIWebView載入html時不顯示網路圖片解決辦法
NSString *html = @"<html><body><p>怎麼顯示網路圖片 <img src=\"http://p0.ifengimg.com/pmop/2017/1218/F9636BB16CC72EC34B5FCB78
iOS開發——WebView載入HTML圖片大小自適應與文章自動換行
本文主要講述瞭如何在iOS應用中使用WebView載入HTML圖片時實現自適應與文章自動換行功能,現在把相關的實現思路和程式碼整理出來分享給iOS程式設計師兄弟們,希望給他們的開發工作帶來幫助。 在很多App中都會使用到webview,尤其是在載入新聞內容等文章形式的資
混合開發之webView載入html,android 和 html之間進行資料互動
現在混合開發比較普遍了,其實早就該學學了,只限於自己對html不是很熟,搭的介面太醜了,哈哈… 今天寫Demo的需求是這樣的 1、在一個介面裡,半面html,半面android原生控制元件。 2、點選html傳送html的資料給android ,andro
TextView載入 html 程式碼,藉助Glide載入jpg or gif 等圖片格式
app載入網頁資料,可能大部分人都習慣用WebView去實現,簡單方便,但是有些時候從api返回的html資料中,是不帶html 的css樣式的,這時候html 加載出來的文字會顯示不整潔,達不到自己想要的效果,甚至文字很小,如果用WebView去顯示的話,使用
Android 獲取手機模擬器sd卡圖片及擷取圖片
需把圖片儲存到找到手機模擬器(夜神模擬器)sd卡中的圖片路徑:檔案管理器/mnt/sdcard/images(images是自己創的資料夾) java程式碼: package com.example.android_07; import android.graphics.Bitmap
Android之Volley框架載入網路圖片
更多幹貨 分散式實戰(乾貨) spring cloud 實戰(乾貨) mybatis 實戰(乾貨) spring boot 實戰(乾貨) React 入門實戰(乾貨) 構建中小型網際網路企業架構(乾貨) python 學習持續更
Android開發技巧之:QQ第三方登入(二)
接 android QQ第三方登入(一) 獲取登入使用者名稱資訊,這邊先抱怨一下,官方API有點坑 Constants原始碼類下就是找不到GRAPH_SIMPLE_USER_INFO這個屬性!無語! 根據官方提供返回的的JSONObject資訊解析:
Android開發技巧之:QQ第三方登入(一)
使用的是Android_SDK_V2.9.1,建議使用最新版; 官方下載:SDK下載 Android studio 中新增到 然後在點選build.gradle檔案新增 配置AndroidManifest 在應用的Andr
Android開發技巧不同狀態的Button
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android開發技巧(一):程式碼日誌跟蹤後臺顯示Log.i();
1.Activity中使用Log.i(); private static final String TAG = “GoodsSourceActivity”;//定義常量標記 Log.i(TAG,”—–TEST-BUNDLE——-“+uuid);//日誌列印,i級別 2.Fragme
Fresco 在Android 4.4 版本 載入https圖片問題 javax.net.ssl.SSLHandshakeException
由於Android系統的不同版本支援的TLS 版本不同,導致Fresco 載入https圖片(圖片來源於不同伺服器,並且配置不一樣)出現SSLHandshakeException TLS 用於在兩個通訊應用程式之間提供保密性和資料完整性。TLS 1.0可以理解成
Android開發技巧之xml tools屬性詳解
我們知道,在 Android 開發過程中,我們的資料常常來自於服務端,只有在執行時才能獲得資料展示,因此在佈局 XML 的編寫過程中,由於缺少資料,我們很難直接看到填充資料後的佈局效果,那這個時候你一般是怎麼做的呢? 經常看到一些小夥伴的做法是在佈局檔案中臨時