1. 程式人生 > >android富文字 載入帶圖片的html

android富文字 載入帶圖片的html

textView載入帶圖片的html

在android中textView中setText中加入富文字以及webView嵌入url是android互動html最簡單的兩種方式;
最近在專案中涉及到富文字;
當不考慮html中圖片載入時候比較簡單:

Spanned spanned =  = Html.fromHtml(html);
tvContent.setText(spanned );

只需要提供html即可,但是如果html中有pic時候 則會出現以下的情況;
這裡寫圖片描述

可以看到本該出現pic的地方出現了空格;所以在填充富文字時候需要對圖片處理一下,在Html中有兩個方法:

 public static Spanned fromHtml(String source) {

    }

    public static Spanned fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler) {

    }

其中三參的方法gormHtml可以處理圖片的問題,需要匿名內部類實現 ImageGetter,第三個引數置為null:

ImageGetter imgGetter = new Html.ImageGetter() {  
        public
Drawable getDrawable(String source) { Drawable drawable = null; URL url; try { url = new URL(source); Drawable.createFromStream(url.openStream(), ""); } catch (Exception e) { e.printStackTrace(); return
null; } drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } }; CharSequence charSequence = Html.fromHtml(html, imageGetter, null); tvContent.setText(charSequence );

這樣就很明瞭了,imageGetter就是根據url來獲取網路圖片填充富文字的,很明顯是一個好事操作,所以需要開子執行緒,而text的setText又是跟新UI的操作;這一點必須注意,不然你的drawable會為空,text無法填充富文字;
但是在填充過程中當html中pic比較多的時候回有部分獲取不到;接下來就需要你在handler中控制一下就ok~ 下面來看最終程式碼:

    /**
     *
     * @param imageUrl
     * @return
     */
   public Drawable getImageFromNetwork(String imageUrl) {
        URL myFileUrl = null;
        Drawable drawable = null;
        try {
            myFileUrl = new URL(imageUrl);


            HttpURLConnection conn = (HttpURLConnection) myFileUrl
                    .openConnection();
            conn.setDoInput(true);

            conn.connect();
            InputStream is = conn.getInputStream();
            drawable = Drawable.createFromStream(is, null);

            is.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return drawable;
    }

    Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            if (msg.what == 0x101) {
                //tvContent.setText((CharSequence) msg.obj);
                if (drawable == null){
                    bindData();
                    return false;
                }
                if (ncontent != null){
                    tvContent.setText((CharSequence) msg.obj);
                    tvContent.setClickable(true);
                    tvContent.setMovementMethod(LinkMovementMethod.getInstance());
                }

            }
            return false;
        }
    });

    private void bindData() {
        tvTitle.setText(mInfo.getNtitle());
        ncontent = mInfo.getNcontent();

        new Thread(new Runnable() {
            Message msg = Message.obtain();

            @Override
            public void run() {
                Html.ImageGetter imageGetter=new Html.ImageGetter() {
                    @Override
                    public Drawable getDrawable(String source) {

                        //String source1 = source;
                        ///Content/
                        if (source.substring(0,8).equals("/Content")){
                            source = Constant.BASE_URL + source;
                        }
                        drawable = getImageFromNetwork(source);
                        if (drawable != null){
                            drawable.setBounds(0,0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
                        }else if (drawable == null){
                            //bindData();
                            return null;
                        }


                        return drawable;
                    }
                };
               //Spanned spanned = Html.fromHtml(ncontent, imageGetter, null);
                CharSequence charSequence = Html.fromHtml(ncontent, imageGetter, null);
                msg.what = 0x101;
                msg.obj = charSequence;
                if (mHandler!= null){
                    mHandler.sendMessage(msg);
                }

            }
        }).start();


        toolbarTitle.setText(mInfo.getNtitle());
        String nsubtitle = mInfo.getNtitle();
        if (nsubtitle.length() > 10){
            String nsubtitle_new = nsubtitle.substring(0, 10);
            toolbarTitle.setText(nsubtitle_new + "...");
        }else{
            toolbarTitle.setText(nsubtitle);
        }

        tvTime.setText(mInfo.getNsendtime());

    }

這樣圖片就顯示了;希望大家在閱讀之後多提建議,期待成長;

相關推薦

android文字 載入圖片html

textView載入帶圖片的html 在android中textView中setText中加入富文字以及webView嵌入url是android互動html最簡單的兩種方式; 最近在專案中涉及到富文字; 當不考慮html中

android 記一次文字載入之路

文章連結:https://mp.weixin.qq.com/s/69TRkmFL1aNuSqfw4ULMJw 專案中經常涉及到富文字的載入,後臺管理端編輯器生成的一段html 程式碼要渲染到移動端上面,一種方法是前端做成html頁面,放到伺服器上,移動端這邊直接webVie

Android把Glide載入圖片變為圓形頭像

Android把Glide載入的圖片變為圓形頭像 原圖: 效果圖: 新增依賴: compile 'com.github.bumptech.glide:glide:3.7.0' 程式碼實現: Glide.with(getContext()).load("http://ww

laravel文字編輯和圖片上傳

---恢復內容開始--- 首先先找到一個適合的編輯器是勝利的一步,選擇wangEditor這個編輯器 地址:http://www.wangeditor.com/ 然後選擇下載,我是通過網上學習的,所以直接選擇的是2.1.23下載   下載後,將dist中的js/css/fonts,放到

android文字轉為為圖片

專案介紹: 將android 專案assets中的1.txt文件中的文字轉換成一張圖片 第一步:建立工具類,用於讀取文件,存入一個String陣列, 程式碼如下:   package test.com; import java.io.BufferedReader; imp

Android下拉框圖片

MainActivity 類  package com.example.android_06; /** * 上課程式碼 */ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; i

文字編輯器圖片上傳失敗的BUG解決:IndexError:list index out of range

富文字編輯器圖片上傳失敗的BUG解決 問題原因 我們將通過Django上傳的圖片儲存到了FastDFS中,而儲存在FastDFS中的檔名沒有後綴名(.png/.jpg/.jif),而ckeditor在處理上傳的檔名按照有後綴名來處理,所以會出現bug錯誤 解決方法 找到虛擬

Lable 文字的插入圖片、設定行距、計算高度等

+ (NSMutableAttributedString *)MutableAttributedString:(NSString *)attri andatIndex:(NSInteger)Index  andImage:(UIImage *)attchImage andFrame:(

Android關於Glide載入圓形圖片之第一次載入時出現不顯示的問題

使用Glide關鍵程式碼: Glide.with(getActivity()).load(url) .error(R.drawable.he

百度ueditor文字編輯器插入html程式碼問題

今天下午想把ueditor儲存的html程式碼從資料庫取出來放回到ueditor中編輯,然後就一直放不進去,通過不斷地測試終於成功,接下來我講一下我的解決方法 從後臺取到值後想在js中直接用 UE.getEditor('editor').execComm

summernote文字編輯器避免html轉義的方法

1、基礎篇使用方法網上很多,可以參考使用手冊2、問題篇Q:提取到編輯器的html,如何存到資料庫?應該使用什麼資料型別?A: VS中是string型別, 資料庫存ntext就好了      因為提取到的html是帶有標籤的,類似<p>  <a>等等,包

Android滑動列表載入大量圖片時候的優化

1 正在滾動的時候停止載入圖片2 滾動到頂部和底部的時候,載入圖片3 滑動速度降低到一定速率的時候,載入圖片4 到底部時候載入更多/** * Created by android on 2018/1/9. * * 快速滑動時候,停止載入圖片, 載入更多 */ publi

Android使用WebView載入本地圖片終極大殺招

WebView 主要呼叫三個方法:loadUrl、loadData、loadDataWithBaseURL。 1、loadUrl 直接載入網頁、圖片並顯示。(本地或是網路上的網頁、圖片、gif) 2、loadData 顯示文字與圖片內容

Android利用glide載入圓形圖片,頭像的實現

主要是用到了RoundedBitmapDrawable這個類是Drawable的一個子抽象類 可以實現從檔案路徑,輸入流或bitmap 的物件都可以轉換成圓形,或圓角,就不用使用第三方了,很方便 如

文字編輯器圖片上傳功能提示falsh版本低請你升級的解決方法

1,最好先檢查下瀏覽器的falsh是否禁用如禁用需開啟 2,安裝官網falsh並重新打卡瀏覽器 falsh禁用會導致很多外掛用不了(圖片上傳外掛,編輯器外掛,視訊播放功能等), 程式碼執行中找不到錯誤,

Android文字實現不同的文字新增點選事件

如果可以點選的文字位置是固定不變的,可以在String.xml中配置(如:“可以點選的”給“點選”設定點選事件)。 @Override protected void onCreate(Bundle s

bootstrap summernote文字編輯器圖片上傳乾貨分享

今天做後臺的時候需要一個富文字編輯器元件,由於專案使用的是bootstrap,所以毫不猶豫的用上了summernote富文字編輯器。文件各大大牛已經整理出來了  但是圖片上傳到伺服器這塊比較雜  大部分都是說上傳到伺服器的圖片格式是base64的,但是我使用base64接

bootstrap-wysiwyg中JS控制元件文字中的圖片由本地上傳到伺服器(阿里雲、七牛、自己的資料庫)

一、我假設你是要儲存到自己的資料庫中(因為上傳到阿里雲、七牛更簡單原理一樣的) 點選插入圖片如下圖: 1、其實你插入的時候不需要做什麼處理一樣也可以插入資料庫的(但是前提你插入的那個欄位必須要求足夠空間比如Mysql你要用LONGTEXT型別,否則是存不下的這樣子前臺獲

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android開源元件載入網路圖片的優缺點比較

關於 Fresco Facebook最近推出了一款用於Android應用中展示圖片的強大圖片庫Fresco,它能夠從網路、本地儲存和本地資源中載入圖片。而且,為了節省資料和CPU,它擁有三級快取。 Fresco 是一個強大的圖片載入元件。 Fresco 中設計有一個叫做 image pipeline

Android】Picasso載入本地圖片如何清理快取cache?

使用Picasso載入SD卡圖片的時候,Picasso也會對該圖片進行快取。所以如果該圖片即使已經變了,Picasso在載入時會仍然使用快取,而不更新圖片。 Picasso快取策略 我們都知道圖片快取使用的是Map鍵值對儲存的,這裡的Key就