富文本显示

Xml文件中是3个textView
代码实现
public class MainActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView mTextView1 = (TextView) findViewById(R.id.test1);
    TextView mTextView2= (TextView) findViewById(R.id.test2);
    TextView mTextView3 = (TextView) findViewById(R.id.test3);

    /**
    * 方法一 :
    * 通过SpannableString 设置
    * 介绍: SpannableString 与String差不多,但是可以通过setSpan()方法设置各种格式或者样式
    */
    String str="字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot";
    // 创建一个 SpannableString对象
    SpannableString msp = new SpannableString(str);
    /**对字符设置样式: setSpan()有4个参数
    * what:object :设置样式的类型
    * start: 设置字符序列的起始点
    * end: 实战字符序列的结束点
    * flags :设置是否包含端点
    * Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点 (a,b)
    * Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b]
    * Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含端start,但不包含end所在的端点 [a,b)
    * Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含两端start和end所在的端点 [a,b]
    */
    // 设置字体(default,default-bold,monospace,serif,sans-serif)
    msp.setSpan(new TypefaceSpan("monospace"), 0, 2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    msp.setSpan(new TypefaceSpan("serif"), 2, 4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体大小(绝对值,单位:像素)
    msp.setSpan(new AbsoluteSizeSpan(20), 4, 6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
    msp.setSpan(new AbsoluteSizeSpan(20, true), 6, 8,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
    // 0.5f表示默认字体大小的一半
    msp.setSpan(new RelativeSizeSpan(0.5f), 8, 10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 2.0f表示默认字体大小的两倍
    msp.setSpan(new RelativeSizeSpan(2.0f), 10, 12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体前景色为洋红色
    msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12, 15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体背景色为青色
    msp.setSpan(new BackgroundColorSpan(Color.CYAN), 15, 18,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式正常
    msp.setSpan(new StyleSpan(Typeface.NORMAL), 18, 20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式粗体
    msp.setSpan(new StyleSpan(Typeface.BOLD), 20, 22,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式斜体
    msp.setSpan(new StyleSpan(Typeface.ITALIC), 22, 24,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式粗斜体
    msp.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 24,27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置下划线
    msp.setSpan(new UnderlineSpan(), 27, 30,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置删除线
    msp.setSpan(new StrikethroughSpan(), 30, 33,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置上下标
    msp.setSpan(new SubscriptSpan(), 34, 35,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    msp.setSpan(new SuperscriptSpan(), 36, 37,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 超级链接(需要添加setMovementMethod方法附加响应)
    // 电话
    msp.setSpan(new URLSpan("tel:4155551212"), 37, 39,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 邮件
    msp.setSpan(new URLSpan("mailto:webmaster@google.com"), 39, 41,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 网络
    msp.setSpan(new URLSpan("http://www.baidu.com"), 41, 43,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 短信 使用sms:或者smsto:
    msp.setSpan(new URLSpan("sms:4155551212"), 43, 45,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 彩信 使用mms:或者mmsto:
    msp.setSpan(new URLSpan("mms:4155551212"), 45, 47,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 地图
    msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
    // 2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
    msp.setSpan(new ScaleXSpan(2.0f), 49, 51,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)
    ColorStateList csllink = null;
    ColorStateList csl = null;
    msp.setSpan(new TextAppearanceSpan("monospace",
      android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 51,
      53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置项目符号
    // 第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
    msp.setSpan(new BulletSpan(
      android.text.style.BulletSpan.STANDARD_GAP_WIDTH, Color.GREEN),
      0, msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置图片 获取图片资源
    Drawable drawable = getResources().getDrawable(R.drawable.smiley);
    //设置图片边界,即图片大小
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
    /**ImageSpan:图片样式
    * ALIGN_BASELINE:与基线对齐
    * ALIGN_BOTTOM:与EditText的底部对齐
    */
    ImageSpan imageSpan=new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM);
    msp.setSpan(imageSpan, 53, 57,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    mTextView1.setText(msp);
    //假如TextView或者EditText要支持点击链接,则 要设置该方法
    mTextView1.setMovementMethod(LinkMovementMethod.getInstance());

//方法2. 通过html标签 来设置 颜色 ,链接等
  String source1= "<font color='#ff0000'>谷歌</font>,<font color='#00ff00'>苹果</font>,微软, 华为,<a href=\"http://www.baidu.com\">百度</a>等<font color='0000ff'>32家大公司</font>觉得很赞...";
  Spanned spanned1 = Html.fromHtml(source1);
  mTextView2.setMovementMethod(LinkMovementMethod.getInstance());
  mTextView2.setText(spanned1);
// 方法3.
  String source2= r("中国") + ","+g("美国")+",英国, 德国,"+getlink("日本", "http://www.qq.com")+"等"+r("32个国家")+"觉得很赞...";
  /**该接口继承了CharSequence接口
  * 用来标记要添加到区域中的对象
  * Spanned:格式化或者样式化
  */
  Spanned spanned2 = Html.fromHtml(source2);
  //假如TextView或者EditText要支持点击链接,则 要设置该方法
  mTextView3.setMovementMethod(LinkMovementMethod.getInstance());
  mTextView3.setText(spanned2);
  }
  //取颜色
  public static String r(String source){
    //对字符串设置格式 ,%s:占位符
    return String.format("<font color='#FF0000'>%s</font>", source);
  }
  //取颜色
  public static String g(String source){
    return String.format("<font color='#00FF00'>%s</font>", source);
  }
  //取链接
  public static String getlink(String linkText,String linkTarget){
    return String.format("<a href=\"%s\">%s</a>", linkTarget,linkText);

  }

转载于:https://www.cnblogs.com/konekou/p/7699251.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值