可以插图片的textview

来源:互联网 发布:在线客服系统源码免费 编辑:程序博客网 时间:2024/05/17 05:15

默认的TextView是无法显示图片的。所以想要实现这个功能得需要我们自己为其添加一个方法。

在这里我们采用SpannableString和ImageSpan两个类来实现这一功能。


main.xml布局文件。我们使用自己定义的EditText

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <easy.stu.MyTextView        android:id="@+id/mytext"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/myButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="insert" /></LinearLayout>


MyEditText.java
package easy.stu;import android.content.Context;import android.graphics.drawable.Drawable;import android.text.Spannable;import android.text.SpannableString;import android.text.style.ImageSpan;import android.util.AttributeSet;import android.widget.EditText;public class MyTextView extends TextView {    public MyTextView(Context context) {        super(context);    }    public MyTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public void insertDrawable(int id) {        final SpannableString ss = new SpannableString("easy");        //得到drawable对象,即所要插入的图片        Drawable d = getResources().getDrawable(id);        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());        //用这个drawable对象代替字符串easy        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);        //包括0但是不包括"easy".length()即:4。[0,4)。值得注意的是当我们复制这个图片的时候,实际是复制了"easy"这个字符串。        ss.setSpan(span, 0, "easy".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);        append(ss);    }}

MyActivity.java

package easy.stu;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MyActivity extends Activity {    /** Called when the activity is first created. */    Button b;    MyEditText e;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        b = (Button) findViewById(R.id.myButton);        e = (MytextView) findViewById(R.id.mytext);        b.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                e.insertDrawable(R.drawable.easy);            }        });    }}


protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);            setContentView(R.layout.textview);        TextView txtInfo =(TextView)findViewById(R.id.tv);        //SpannableString文本类,包含不可变的文本但可以用已有对象替换和分离。        //可变文本类参考SpannableStringBuilder        SpannableString ss = new SpannableString("红色打电话斜体删除线绿色下划线图片:.");          //用颜色标记文本        ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 2,                  //setSpan时需要指定的 flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括).                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        //用超链接标记文本        ss.setSpan(new URLSpan("tel:4155551212"), 2, 5,                  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        //用样式标记文本(斜体)        ss.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7,                  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        //用删除线标记文本        ss.setSpan(new StrikethroughSpan(), 7, 10,                  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        //用下划线标记文本        ss.setSpan(new UnderlineSpan(), 10, 16,                  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        //用颜色标记        ss.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,                  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        //获取Drawable资源        Drawable d = getResources().getDrawable(R.drawable.icon);          d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());        //创建ImageSpan        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);        //用ImageSpan替换文本        ss.setSpan(span, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);          txtInfo.setText(ss);        txtInfo.setMovementMethod(LinkMovementMethod.getInstance()); //实现文本的滚动       }


0 0