• 用SpannableString来设置一个textview的各种样式


    通常情况下,textview 设置文本的样式很单一,为了满足某种需求可以使用SpannableString来设置文本字体大小、颜色、超链接等属性。

    xml就一个TextView所以就不在给出了,直接看代码。

     1 package com.dj.test;
     2 
     3 import android.app.Activity;
     4 import android.graphics.Color;
     5 import android.os.Bundle;
     6 import android.text.SpannableString;
     7 import android.text.Spanned;
     8 import android.text.method.ScrollingMovementMethod;
     9 import android.text.style.AbsoluteSizeSpan;
    10 import android.text.style.BackgroundColorSpan;
    11 import android.text.style.ForegroundColorSpan;
    12 import android.text.style.RelativeSizeSpan;
    13 import android.text.style.StyleSpan;
    14 import android.text.style.URLSpan;
    15 import android.text.style.UnderlineSpan;
    16 import android.widget.TextView;
    17 
    18 public class MainActivity extends Activity {
    19     private TextView tv;
    20 
    21     @Override
    22     protected void onCreate(Bundle savedInstanceState) {
    23         super.onCreate(savedInstanceState);
    24         setContentView(R.layout.activity_main);
    25         tv = (TextView) findViewById(R.id.tv);
    26         String str = "每个人都有一个死角, 
     自己走不出来,别人也闯不进去。
    我把最深沉的秘密放在那里。
    你不懂我,我不怪你。www.baidu.com " +
    27                 "
    每个人都有一道伤口,
    或深或浅,盖上布,以为不存在。
    我把最殷红的鲜血涂在那里。
    你不懂我,我不怪你。" +
    28                 "
    每个人都有一段告白,
    忐忑、不安,却饱含真心和勇气。
    我把最抒情的语言用在那里,
    你不懂我,我不怪你。" +
    29                 "
    每个人都有一场爱恋,
    用心、用情、用力,感动也感伤。
    我把最炙热的心情藏在那里,
    你不懂我,我不怪你。" +
    30                 "
    每个人都有一行眼泪,
    喝下的冰冷的水,酝酿成的热泪。
    我把最心酸的委屈汇在那里,
    你不懂我,我不怪你。";
    31         
    32         SpannableString spanStr = new SpannableString(str);
    33         //设置字体的绝对大小,原来字体为20sp,所以10表示原来字体的一半。true表示字体大小与屏幕有关,与像素无关。
    34         spanStr.setSpan(new AbsoluteSizeSpan(10, true), 2, 5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    35         //设置字体的相对大小,正常大小为1,所以0.5f为原来的一半
    36         spanStr.setSpan(new RelativeSizeSpan(0.5f), 7, 10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    37         //设置字体的背景色
    38         spanStr.setSpan(new BackgroundColorSpan(Color.CYAN), 11, 15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    39         //设置字体的前景色
    40         spanStr.setSpan(new ForegroundColorSpan(Color.MAGENTA), 16, 19,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    41         //设置粗体
    42         spanStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    43         //设置下划线
    44         spanStr.setSpan(new UnderlineSpan(), 30, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
    45         //设置超链接
    46         spanStr.setSpan(new URLSpan("http://www.baidu.com"), 53, 66, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
    47         //设置textview超出屏幕是可滚动
    48         tv.setMovementMethod(ScrollingMovementMethod.getInstance());
    49         tv.setText(spanStr);
    50     }
    51 }

    用SpannableString还可以设置很多属性,就不在用代码一一举例说明了。

      //设置字体样式正常,粗体,斜体,粗斜体 
            spanStr.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常 
            spanStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗体 
            spanStr.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜体 
            spanStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜体 
             
            //设置下划线 
            spanStr.setSpan(new UnderlineSpan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
             
            //设置删除线 
            spanStr.setSpan(new StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
             
            //设置上下标 
            spanStr.setSpan(new SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下标    
            spanStr.setSpan(new SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上标             
             
            //超级链接(需要添加setMovementMethod方法附加响应) 
            spanStr.setSpan(new URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话    
            spanStr.setSpan(new URLSpan("mailto:webmaster@google.com"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件    
            spanStr.setSpan(new URLSpan("http://www.baidu.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络    
            spanStr.setSpan(new URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto: 
            spanStr.setSpan(new URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto: 
            spanStr.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图    
             
            //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍 
            spanStr.setSpan(new ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变 

  • 相关阅读:
    silverlight click 事件委托是 RoutedEventHandler
    silverlight 2 系统对话框
    CSLA.Net 3.0.5 项目管理示例 UI ProjectEdit.aspx
    委托和事件 委托
    Visual Studio 项目模板、文件模板、代码段和环境设置
    C# 打好基础图文详解
    Hession 基础应用
    ADO.NET Entity Framework 概述
    CSLA.Net 3.0.5 项目管理示例 业务基类 Project.cs
    关于使用 Visual Studio 开发环境收费的问题,博友们谁有经验分享一下。
  • 原文地址:https://www.cnblogs.com/dj168/p/SpannableString.html
Copyright © 2020-2023  润新知