android:如何在TextView實現圖文混排

BobbyDorn 8年前發布 | 7K 次閱讀 Android開發 移動開發

來自: http://blog.csdn.net/su20145104009/article/details/50667838


我們通常在TextView文本中設置文字。可是如何設置圖文混排呢?

我就在這里寫一個例子 。我們需要用到一點簡單的HTML知識

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

<font>:設置顏色和字體

<big>:設置大號

<small>:設置小號

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

<a>:鏈接地址

<img>:插入圖片

在drawable中存入我們的圖片。

然后我們在布局文件中添加一個TextView控件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
在MainActivity.clss文件中

寫一行HTML形式的代碼,并用一個字符串接收它

String html="<font>草莓</font><img src=‘strawberry’>";
這行代碼是什么意思呢?大家也看了上面的HTML簡單的標簽。<font>是字體,所以<font>和</font>之間的是文字,<img>是圖片,src是圖片的名稱

然后我們要解釋這行HTML代碼,就用到了這個方法

Html.fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)
其中source是字符串形式的 也就是我們需要解釋的HTML代碼。ImageGetter就是圖片的資源,TagHandler就標簽在這里設置為null就行。

那么ImageGetter該怎么寫呢?我們可以new 一個ImageGetter對象 會發現里面有一個方法

public Drawable getDrawable(String source) {
            }
我們可以使用輸出日志信息看看這個方法里面傳遞的source是什么

發現了嗎?就是我們Html代碼里面的 內容<img src='strawberry'>

由于返回的是Drawable類型的資源我們首先new 一個Drawable對象,然后通過getSource()的方法獲取圖片資源

最后一定要通過setBounds()方法設置一下圖片的大小。否則是不會顯示的哦

if(source.equals("‘strawberry’")){
                    Drawable draw=getResources().getDrawable(R.drawable.strawberry);
                    draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());
                    return draw;
                }

附上運行結果圖片

MainActivity.class的全部代碼如下:

package com.example.textview;

import javax.xml.transform.Source;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    private TextView tv_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_text=(TextView) findViewById(R.id.tv_text);
        String html="<font>草莓</font><img src=‘strawberry’>";
        CharSequence text=Html.fromHtml(html, new ImageGetter() {

            public Drawable getDrawable(String source) {
                //根據圖片資源ID獲取圖片
                Log.d("source", source);
                if(source.equals("‘strawberry’")){
                    Drawable draw=getResources().getDrawable(R.drawable.strawberry);
                    draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());
                    return draw;
                }
                return null;
            }
        }, null);
        tv_text.setText(text);
    }
}



 本文由用戶 BobbyDorn 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!