文本操作类SpannableString的使用

今天来看下textview到底有多强,直接上代码:

布局的话很简单,就是垂直线性布局里面放了9个textview,这里我就不放出来了


public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main ) ;
TextView textView = (TextView) findViewById(R.id. tv1 ) ;
TextView textView2 = (TextView) findViewById(R.id. tv2 ) ;
TextView textView3 = (TextView) findViewById(R.id. tv3 ) ;
TextView textView4 = (TextView) findViewById(R.id. tv4 ) ;
TextView textView5 = (TextView) findViewById(R.id. tv5 ) ;
TextView textView6 = (TextView) findViewById(R.id. tv6 ) ;
TextView textView7 = (TextView) findViewById(R.id. tv7 ) ;
TextView textView8 = (TextView) findViewById(R.id. tv8 ) ;
TextView textView9 = (TextView) findViewById(R.id. tv9 ) ;
TextView textView10 = (TextView) findViewById(R.id. tv10 ) ;
//分别设置颜色
SpannableString spannableString = new SpannableString( "lebron james" ) ;
spannableString.setSpan( new ForegroundColorSpan(Color. RED ) , 0 , 6 , Spanned. SPAN_INCLUSIVE_EXCLUSIVE ) ;
spannableString.setSpan( new ForegroundColorSpan(Color. BLUE ) , 7 , 12 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView.append(spannableString) ;
//分别设置点击事件
SpannableString spannableString1 = new SpannableString( "kobe james" ) ;
spannableString1.setSpan( new ClickableSpan() {
@Override
public void onClick (View widget) {
Toast. makeText (MainActivity. this, "kobe" , Toast. LENGTH_SHORT ).show() ;
}
} , 0 , 4 , Spanned. SPAN_INCLUSIVE_EXCLUSIVE ) ;
spannableString1.setSpan( new ClickableSpan() {
@Override
public void onClick (View widget) {
Toast. makeText (MainActivity. this, "james" , Toast. LENGTH_SHORT ).show() ;
}
} , 5 , 10 , Spanned. SPAN_INCLUSIVE_EXCLUSIVE ) ;
textView2.append(spannableString1) ;
//设置textview可点击
textView2.setMovementMethod(LinkMovementMethod. getInstance ()) ;

//分别设置URL
SpannableString spannableString2 = new SpannableString( "百度,网易" ) ;
spannableString2.setSpan( new URLSpan( "http://www.baidu.com" ) , 0 , 2 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString2.setSpan( new URLSpan( "http://www.baidu.com" ) , 3 , spannableString2.length() , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView3.append(spannableString2) ;
//设置textview可点击
textView3.setMovementMethod(LinkMovementMethod. getInstance ()) ;

//设置删除线
SpannableString spannableString3 = new SpannableString( "删除线" ) ;
spannableString3.setSpan( new StrikethroughSpan() , 0 , spannableString3.length() , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView4.append(spannableString3) ;

//设置下标
SpannableString spannableString4 = new SpannableString( "(x1+x2)2=x12+x22+2*x1x2" ) ;
spannableString4.setSpan( new SubscriptSpan() , 2 , 3 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;

spannableString4.setSpan( new SubscriptSpan() , 5 , 6 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString4.setSpan( new SubscriptSpan() , 10 , 11 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString4.setSpan( new SubscriptSpan() , 14 , 15 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString4.setSpan( new SubscriptSpan() , 20 , 21 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString4.setSpan( new SubscriptSpan() , 22 , 23 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;

//设置上标
spannableString4.setSpan( new SuperscriptSpan() , 7 , 8 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString4.setSpan( new SuperscriptSpan() , 11 , 12 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString4.setSpan( new SuperscriptSpan() , 15 , 16 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView5.append(spannableString4) ;

//设置下滑线
SpannableString spannableString5 = new SpannableString( "下划线" ) ;
spannableString5.setSpan( new UnderlineSpan() , 0 , spannableString5.length() , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView6.append(spannableString5) ;

//设置基于X轴的缩放
SpannableString spannableString6 = new SpannableString( "基于X轴的缩放" ) ;
spannableString6.setSpan( new ScaleXSpan( 4 ) , 0 , spannableString6.length() , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView7.append(spannableString6) ;

//设置各种点击事件
SpannableString spannableString7 = new SpannableString( "打电话,发短信,发邮件,上网" ) ;
spannableString7.setSpan( new URLSpan( "tel:13515135666" ) , 0 , 3 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString7.setSpan( new URLSpan( "smsto:13515135666" ) , 4 , 7 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString7.setSpan( new URLSpan( "mailto:13515135666@qq.com" ) , 8 , 11 , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
spannableString7.setSpan( new URLSpan( "http://lol.qq.com/" ) , 12 , spannableString7.length() , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView8.append(spannableString7) ;
textView8.setMovementMethod(LinkMovementMethod. getInstance ()) ;
//设置图片

SpannableString spannableString8 = new SpannableString( "这是一张图片哈哈哈" ) ;
spannableString8.setSpan( new DynamicDrawableSpan() {
@Override
public Drawable getDrawable () {
Drawable drawable = getResources().getDrawable(R.mipmap. ic_launcher ) ;
drawable.setBounds( 0 , 0 , 100 , 100 ) ;
return drawable ;
}
} , 5 , spannableString8.length() , Spanned. SPAN_EXCLUSIVE_INCLUSIVE ) ;
textView9.append(spannableString8) ;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值