首页 > 代码库 > Android之TextView高级用法

Android之TextView高级用法

功能:

  1. 在TextView中显示图片,类似于含有表情图片的聊天

  2.设置TextView的部分text可以点击

说明:

  SpannableString 实现了CharSequence接口,可以将text的指定部分标记为CharacterStyle对象,如ImageSpan,ClickableSpan等,TextView在显示时会将标记为CharacterStyle的部分text做特定处理

 

代码1:  在TextView中显示图片    

  // TextView
  mTextView = (TextView) findViewById(R.id.textView1);
  // 创建SpannableString对象
  SpannableString stringSpan = new SpannableString("0123456789");
  // 创建CharacterStyle对象
  ImageSpan imageSpan = new ImageSpan(this, R.drawable.p1);
  // 将SpannableString的0~3共3个字符标记为ImageSpan对象(CharacterStyle)
  stringSpan.setSpan(imageSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
  // 将SpannableString的4~5共1个字符标记为imageSpan对象
  // 注意:一个ImaggeSpan对象只能标记一次
  stringSpan.setSpan(new ImageSpan(this,R.drawable.p2), 4, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
  // 显示text,此时,输出结果为: 图片(p1)3图片(p2)56789
  mTextView.setText(getSpannableString());

 

代码2:  在TextView中显示部分可点击的文字

  // TextView
  mTextView = (TextView) findViewById(R.id.textView1);
  // 创建SpannableString对象
  SpannableString stringSpan = new SpannableString("0123456789");
  // 创建ClickableSpan对象,用于标记可点击的text
  ClickableSpan clickSpan = new ClickableSpan() {
    // 当被标记时text被点击时的回调方法
    @Override
    public void onClick(View arg0) {
      Log.i("DTV", "click");
    }
    // 用于定义被标记文字的样式
    @Override
    public void updateDrawState(TextPaint ds) {
      super.updateDrawState(ds);
      // 设置无下划线
      ds.setUnderlineText(false);
    }
  };
  // 标记文字
  stringSpan.setSpan(clickSpan, 6, 9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  // 显示text,此时,输出结果为: 图片(p1)3图片(p2)56789
  mTextView.setText(stringSpan);
  mTextView.setMovementMethod(LinkMovementMethod.getInstance());// 必须要有,否则不会调用onClick方法