文章目录

  • 1、简介
  • 2、实现原理
  • 3、代码实例


1、简介

我们在使用TextView的时,有时候回遇到文字加图片的样子

Android  TextView  实现图文混合_字符串

2、实现原理

在TextView中预订了一些类似HTML的标签,通过标签可以使TextView控件显示不同颜色,大小,字体的文字

<font>:设置颜色和字体
<big>:设置大号
<small>:设置小号
<i>\<b>:斜体、粗体
<a>:链接地址
<img>:插入图片

书写 html格式字符串,并且解析

3、代码实例

1)xml 文件 比较简单

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

2)功能代码

package myapplication21.lum.com.mytextview;

import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.testView_id);

        String html="<font>企鹅</font><img src=QQ> " +   //写一行HTML形式的代码,并用一个字符串接收它
                    "<font>微信</font><img src=VX>";

        /**
         * 这行代码是什么意思呢?大家也看了上面的HTML简单的标签。<font>是字体,所以<font>和</font>之间的是文字,<img>是图片,src是图片的名称
         * 然后我们要解释这行HTML代码,就用到了这个方法
         *
         * 其中source是字符串形式的 也就是我们需要解释的HTML代码。ImageGetter就是图片的资源,TagHandler就标签在这里设置为null就行。
         * */
        CharSequence text = Html.fromHtml(html, new Html.ImageGetter() {
            public Drawable getDrawable(String source) {
                Drawable draw = null;
                //根据图片资源ID获取图片
                Log.d("source", source);
                switch (source){
                    case "VX":
                        draw =getResources().getDrawable(R.drawable.weixin);
                        break;
                    case "QQ":
                        draw =getResources().getDrawable(R.drawable.qq);
                        break;
                        default:
                            return null;
                }
                draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());  //设置图片的大小
                return draw;
            }
        }, null);
        textView.setText(text);
        textView.append("大战360"); //在文字后面直接添加显示
    }
}