TextView/EditText处理图片显示、字体样式、超链接等

 通常用于显示文字,但有时候也需要在文字中夹杂一些图片,比如QQ中就可以使用表情图片,又比如需要的文字高亮显示等

android中有个android.text包,这里提供了对文本的强大的处理功能。

主要用SpannableString和ImageSpan,ImageGetter类

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class InputImageActivity extends Activity {
    /** Called when the activity is first created. */
private EditText input;
private Button btn;
private Button btn1;
  private TextView tv;
  private TextView show;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    /** Called when the activity is first created. */
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv = (TextView) findViewById(R.id.show);
    btn  = (Button) findViewById(R.id.btn);
    input = (EditText) findViewById(R.id.input);
    btn1 = (Button) findViewById(R.id.btn1);
    show  =  (TextView) findViewById(R.id.showview);
    btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
input.append(Html.fromHtml("aa<img src='"+R.drawable.image2+"'/>bb", imageGetter, null));
}
});
    btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
show.append(input.getText());
}
});
    String htmlLinkText = "";
    htmlLinkText = "aaaaaaaaaa"
    + "<a style=\"color:red;\" href=\"http://g.cn\">超链接点击<sup>事件</sup></a>"
    + "aaaaaaaaaaaaaaaa";
    Log.i("info", Html.fromHtml(htmlLinkText).toString());
    tv.setText(Html.fromHtml(htmlLinkText));
    SpannableStringBuilder ss = null;
    ss = new SpannableStringBuilder("红色打电话斜体删除线绿色下划线背景");
    ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 2,
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
   
    ///URLSpan URLSpan("http://g.cn")
    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, 15,
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    ss.setSpan(new BackgroundColorSpan(Color.LTGRAY), 15, 17,
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
   
    //----------------------------
    Pattern pattern = Pattern.compile("绿色", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("红色打电话斜体删除线绿色下划线背景");
    while(matcher.find()) {
    ss.setSpan(new ImageSpan(this, R.drawable.image1, ImageSpan.ALIGN_BOTTOM), matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
   
    tv.append(ss);
    //----------------------------
    ImageGetter imageGetter = new ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
    int id = Integer.parseInt(source);
    // 根据id从资源文件中获取图片对象
    Drawable d = getResources().getDrawable(id);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    return d;
    }
    };
    Log.i("info", Html.fromHtml("aa<img src='"+R.drawable.image1+"'/>bb").toString());
    tv.append(Html.fromHtml("aa<img src='"+R.drawable.image1+"'/>bb", imageGetter, null));  
   
    Log.i("info", tv.getText().toString());
    tv.setMovementMethod(LinkMovementMethod.getInstance());
    /**
    * //Android EditText插入字符串到光标所在位置
    EditText mTextInput=(EditText)findViewById(R.id.input);//EditText对象
    int index = mTextInput.getSelectionStart();//获取光标所在位置
    String text="I want to input str";
    (方法1):
    Editable edit = mTextInput.getEditableText();//获取EditText的文字
    if (index < 0 || index >= edit.length() ){
          edit.append(text);
    }else{
         edit.insert(index,text);//光标所在位置插入文字
    }
    * **/
    }
    ImageGetter imageGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
// 根据id从资源文件中获取图片对象
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
};

    }


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值