天天看點

Android中TextView深入使用----單獨TextView實作圖文混排

通常情況下TextView隻用來顯示文本資料,但是TextView也可以顯示圖檔,如果結合Html則可以顯示非常複雜的圖文混排效果。

1、        使用諸如屬性android:drawableTop=""等來讓TextView顯示圖檔

2、       結合Html來顯示圖檔。(重點介紹)

在TextView中預訂了一些類似HTML的标簽,通過标簽可以使TextView控件顯示不同顔色,大小,字型的文字

<font>:設定顔色和字型

<big>:設定大号

<small>:設定小号

<i>\<b>:斜體、粗體

<a>:連結位址

<img>:插入圖檔

等等。

如何使用:

1、比如如何讓TextView可以識别這麼一段Html文字  <font color=”red”>紅色字型</font>

這個時候需要用到一個類:Html。  使用它的一個靜态方法:

Spanned spanned =Html.fromHtml("<font color=’red’>紅色</font>");

傳回的Spanned類型的對象,Spanned是個接口繼承了CharSequence接口。是以直接把Spanned對象通過setText方法直接讓TextView顯示即可。

2、如果Html資料中有img圖檔怎麼辦?則直接使用上面的方法無法顯示圖檔。

例如:String html ="<font color='red'>紅色字型</font> <h1>h1标題</h1>" +

                "</br>" +

                "下面是圖檔<br />"

                + "<imgsrc='http://pic6.nipic.com/20100308/4080141_175940029491_2.jpg' />"

                + "<imgsrc='http://pic6.nipic.com/20100308/4080141_175940029491_2.jpg' />";

則需要調用Html的這個靜态方法:

Html.fromHtml(String source, ImageGetter imageGetter,TagHandler tagHandler)

其中:source就是字元串形式的Html代碼,ImageGetter就是圖檔的資源, TagHandler指的處理一些未知标簽,一般情況置為null就可以了。

重點是ImageGetter:它是一個接口,隻有一個方法:

public Drawable getDrawable(String source),隻要覆寫這個方法就可以了。其中參數為html資料中img标簽的src屬性的值(url或者本地圖檔的位址都可以)。

注意:由于通路網絡的代碼必須放在子線程,是以涉及到網絡圖檔展示的時候,需要把這行代碼放在子線程中執行,這樣getDrawable方法就會在子線程中執行。

另外:即使src屬性沒有任何值,隻要getDrawable有傳回值,就會顯示相應的圖檔。

ImageGetter的實作:

class MyImageGetter implements Html.ImageGetter{

    @Override

    public Drawable getDrawable(String source){

        Drawable drawable = null;

        try{

            URL ulr = new URL(source);

            InputStream inputStream = ulr.openStream();

            drawable = Drawable.createFromStream(inputStream, "");

        }catch(Exception e){

            e.printStackTrace();

        }

        if(drawable != null){

            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable

                   .getIntrinsicHeight());

        }

        return drawable;

    }

}

子線程:

final String html = "<font color='red'>紅色字型</font> <h1>h1标題</h1>" +
      
        "<br />" +
      
        "下面是圖檔<br />"
      
        + "<img src='http://pic6.nipic.com/20100308/4080141_175940029491_2.jpg' />"       
    +"<img src='http://pic6.nipic.com/20100312/4080141_202844009651_2.jpg ' />"; 
      
new Thread(){
      
    @Override
      
    public void run(){
      
        final Spanned spanned = Html.fromHtml(html, new MyImageGetter(), null);
      
        textView.post(new Runnable(){
      
            @Override
      
            public void run(){
      
                textView.setText(spanned);
      
            }
      
        });
      
    }
      
}.start();      

效果圖:

Android中TextView深入使用----單獨TextView實作圖文混排