字符间距——扩展

一:先介绍如何设置字体的颜色,大小;http://blog.csdn.net/lukejunandroid/article/details/25892737

(一)android.text.SpannableString

构造方法:SpannableString(CharSequence source);

常用方法:

void    removeSpan(Object what)
void    setSpan(Object what, int start, int end, int flags)
final CharSequence    subSequence(int start, int end)
Returns a CharSequence from the start index (inclusive) to the end index (exclusive) of this sequence.
 

(二)android.text.style.TypefaceSpan
构造方法
TypefaceSpan(String family)
TypefaceSpan(Parcel src)
Changes the typeface family of the text to which the span is attached.

(三)Spanned继承了接口CharSequence
Spans of type SPAN_EXCLUSIVE_EXCLUSIVE do not expand to include text inserted at either their starting or ending point.
不扩展到(文字的开头或结尾点)

效果预览:

 1 public class MainActivity extends ActionBarActivity {  
 2     private TextView tv, tv2;  
 3     private SpannableString sStr, sStr2;  
 4     @Override  
 5     protected void onCreate(Bundle savedInstanceState) {  
 6         super.onCreate(savedInstanceState);  
 7         setContentView(R.layout.activity_main);  
 8         tv = (TextView) this.findViewById(R.id.textView1);  
 9         tv2 = (TextView) this.findViewById(R.id.textView2);  
10         //创建一个SpannableString对象  
11         sStr = new SpannableString("最是那一低头的温柔,像一朵水莲花不胜凉风的娇羞,道一声珍重,道一声珍重,那一声珍重里有蜜甜的忧愁");  
12         //设置字体(default,default-bold,monospace(单一间隔),serif(衬线),sans-serif(无衬线))  
13         sStr.setSpan(new TypefaceSpan("default"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
14         sStr.setSpan(new TypefaceSpan("default-bold"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
15         sStr.setSpan(new TypefaceSpan("monospace"), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
16         sStr.setSpan(new TypefaceSpan("serif"), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
17         sStr.setSpan(new TypefaceSpan("sans-serif"), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
18         //设置字体大小(绝对值,单位:像素),第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素  
19         sStr.setSpan(new AbsoluteSizeSpan(20), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
20         sStr.setSpan(new AbsoluteSizeSpan(20, true), 12, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);       
21         //设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍   ,0.5表示一半  
22         sStr.setSpan(new RelativeSizeSpan(0.5f), 14, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    
23         //设置字体前景色     
24         sStr.setSpan(new ForegroundColorSpan(Color.RED), 16, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    
25         //设置字体背景色     
26         sStr.setSpan(new BackgroundColorSpan(Color.CYAN), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
27         //设置字体样式: NORMAL正常,BOLD粗体,ITALIC斜体,BOLD_ITALIC粗斜体     
28         sStr.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 20, 21, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
29         sStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     
30         sStr.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 23, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     
31         sStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 23, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
32         //设置下划线     
33         sStr.setSpan(new UnderlineSpan(), 24, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);               
34         //设置删除线     
35         sStr.setSpan(new StrikethroughSpan(), 26, 28, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
36         //设置上下标     
37         sStr.setSpan(new SubscriptSpan(), 28, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);       
38         sStr.setSpan(new SuperscriptSpan(), 30, 32, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
39         //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍 ,2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变  
40         sStr.setSpan(new ScaleXSpan(2.0f), 32, 34, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
41         //设置项目符号     
42         sStr.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0 ,sStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色  
43         //设置图片     
44         Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);      
45         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
46         sStr.setSpan(new ImageSpan(drawable), 24, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
47           
48         tv.setText(sStr);  
49         tv.setMovementMethod(LinkMovementMethod.getInstance());  
50           
51         sStr2 = new SpannableString("电话邮件百度一下短信彩信进入地图");  
52         //超级链接(需要添加setMovementMethod方法附加响应)     
53         sStr2.setSpan(new URLSpan("tel:8008820"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话        
54         sStr2.setSpan(new URLSpan("mailto:kejunlu@qq.com"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件        
55         sStr2.setSpan(new URLSpan("http://www.baidu.com"), 4, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络        
56         sStr2.setSpan(new URLSpan("sms:10086"), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:     
57         sStr2.setSpan(new URLSpan("mms:10086"), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:     
58         sStr2.setSpan(new URLSpan("geo:32.123456,-17.123456"), 12, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图   
59           
60         tv2.setText(sStr2);  
61         tv2.setMovementMethod(LinkMovementMethod.getInstance());  
62     }  

 

 


 

 

原文地址:https://www.cnblogs.com/liyanli-mu640065/p/4523597.html