使用SpannableString实现字体的各种效果

来源:互联网 发布:软件 职称 编辑:程序博客网 时间:2024/04/29 10:32

转载自:http://blog.csdn.net/jjwwmlp456/article/details/2117466

代码很简单,这个代码可以实现同一行的文本的字体使用不同的样式,比如有的一行文本String,要使中间的几个字变成红色,或者变成斜体,就可以用这样的代码

先上代码,基本与原创没有太大改动

package com.example.testspanablestring;import android.app.Activity;import android.graphics.Color;import android.graphics.Typeface;import android.os.Bundle;import android.text.Spannable;import android.text.SpannableString;import android.text.style.AbsoluteSizeSpan;import android.text.style.BackgroundColorSpan;import android.text.style.ForegroundColorSpan;import android.text.style.StrikethroughSpan;import android.text.style.StyleSpan;import android.text.style.URLSpan;import android.text.style.UnderlineSpan;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class SpannableStringActivity extends Activity implements OnClickListener {private EditText tv;private Button underline_btn;private Button strike_btn;private Button style_btn;private Button font_btn;private Button color_btn1;private Button color_btn2;private Button url_btn;private Button image_btn;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_spanable_string);    tv = (EditText) this.findViewById(R.id.tv);    underline_btn = (Button) this.findViewById(R.id.underline_btn);    strike_btn = (Button) this.findViewById(R.id.strike_btn);    style_btn = (Button) this.findViewById(R.id.style_btn);    font_btn = (Button) this.findViewById(R.id.font_btn);    color_btn1 = (Button) this.findViewById(R.id.color_btn1);    color_btn2 = (Button) this.findViewById(R.id.color_btn2);    url_btn = (Button) this.findViewById(R.id.url_btn);    image_btn = (Button) this.findViewById(R.id.image_btn);    underline_btn.setOnClickListener(this);    strike_btn.setOnClickListener(this);    style_btn.setOnClickListener(this);    font_btn.setOnClickListener(this);    color_btn1.setOnClickListener(this);    color_btn2.setOnClickListener(this);    url_btn.setOnClickListener(this);    image_btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {    switch (v.getId()) {    case R.id.underline_btn:        addUnderLineSpan();        break;    case R.id.strike_btn:        addStrikeSpan();        break;    case R.id.style_btn:        addStyleSpan();        break;    case R.id.font_btn:        addFontSpan();        break;    case R.id.color_btn1:        addForeColorSpan();        break;    case R.id.color_btn2:        addBackColorSpan();        break;    case R.id.url_btn:        addUrlSpan();        break;    case R.id.image_btn://        addImageSpan();        break;   }}/*** 超链接*/private void addUrlSpan() {    SpannableString spanString = new SpannableString("超链接");    URLSpan span = new URLSpan("tel:0123456789");    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}/*** 文字背景颜色*/private void addBackColorSpan() {    SpannableString spanString = new SpannableString("颜色2");    BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}/*** 文字颜色*/private void addForeColorSpan() {    SpannableString spanString = new SpannableString("颜色1");    ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}/*** 字体大小*/private void addFontSpan() {    SpannableString spanString = new SpannableString("36号字体");    AbsoluteSizeSpan span = new AbsoluteSizeSpan(36);    spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}/*** 粗体,斜体*/private void addStyleSpan() {    SpannableString spanString = new SpannableString("BIBI");    StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);    spanString.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}/*** 删除线*/private void addStrikeSpan() {    SpannableString spanString = new SpannableString("删除线");    StrikethroughSpan span = new StrikethroughSpan();    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}/*** 下划线*/private void addUnderLineSpan() {    SpannableString spanString = new SpannableString("下划线");    UnderlineSpan span = new UnderlineSpan();    spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    tv.append(spanString);}
效果图如下:



0 0