个人总结之SpannableString,处理textview不同样式

    有的时候,我们开发中一个TextView需要不同的样式,例如前半段是一个颜色,后半段是一个颜色,还有下划线,链接等,这时候我们就可以用到SpannableString这个类,其实也很简单,只需要new出来

    SpannableString  ss= new SpannableString(String Text);//这里写你想要改的textView

  1.  mTextView = (TextView)findViewById(R.id.myTextView);  

  2.           

  3.         //创建一个 SpannableString对象    

  4.         msp = new SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");   

  5.           

  6.         //设置字体(default,default-bold,monospace,serif,sans-serif)  

  7.         msp.setSpan(new TypefaceSpan("monospace"), 02, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  

  8.         msp.setSpan(new TypefaceSpan("serif"), 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  

  9.           

  10.         //设置字体大小(绝对值,单位:像素)   

  11.         msp.setSpan(new AbsoluteSizeSpan(20), 46, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  

  12.         msp.setSpan(new AbsoluteSizeSpan(20,true), 68, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。  

  13.           

  14.         //设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍  

  15.         msp.setSpan(new RelativeSizeSpan(0.5f), 810, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //0.5f表示默认字体大小的一半  

  16.         msp.setSpan(new RelativeSizeSpan(2.0f), 1012, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示默认字体大小的两倍  

  17.           

  18.         //设置字体前景色  

  19.         msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 1215, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置前景色为洋红色  

  20.           

  21.         //设置字体背景色  

  22.         msp.setSpan(new BackgroundColorSpan(Color.CYAN), 1518, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置背景色为青色  

  23.        

  24.         //设置字体样式正常,粗体,斜体,粗斜体  

  25.         msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 1820, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常  

  26.         msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 2022, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗体  

  27.         msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 2224, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜体  

  28.         msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 2427, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜体  

  29.           

  30.         //设置下划线  

  31.         msp.setSpan(new UnderlineSpan(), 2730, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  

  32.           

  33.         //设置删除线  

  34.         msp.setSpan(new StrikethroughSpan(), 3033, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  

  35.           

  36.         //设置上下标  

  37.         msp.setSpan(new SubscriptSpan(), 3435, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下标     

  38.         msp.setSpan(new SuperscriptSpan(), 3637, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上标              

  39.           

  40.         //超级链接(需要添加setMovementMethod方法附加响应)  

  41.         msp.setSpan(new URLSpan("tel:4155551212"), 3739, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话     

  42.         msp.setSpan(new URLSpan("mailto:[email protected]"), 3941, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件     

  43.         msp.setSpan(new URLSpan("http://www.baidu.com"), 4143, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络     

  44.         msp.setSpan(new URLSpan("sms:4155551212"), 4345, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:  

  45.         msp.setSpan(new URLSpan("mms:4155551212"), 4547, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:  

  46.         msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 4749, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图     

  47.           

  48.         //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍  

  49.         msp.setSpan(new ScaleXSpan(2.0f), 4951, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变  

  50.           

  51.         //设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)  

  52.         ColorStateList csllink = null;  

  53.         ColorStateList csl = null;  

  54.         XmlResourceParser xppcolor=getResources().getXml (R.color.color);  

  55.         try {  

  56.             csl= ColorStateList.createFromXml(getResources(),xppcolor);  

  57.         }catch(XmlPullParserException e){  

  58.             // TODO: handle exception  

  59.             e.printStackTrace();          

  60.         }catch(IOException e){  

  61.             // TODO: handle exception  

  62.             e.printStackTrace();          

  63.         }  

  64.   

  65.         XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor);  

  66.         try {  

  67.             csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor);  

  68.         }catch(XmlPullParserException e){  

  69.             // TODO: handle exception  

  70.             e.printStackTrace();          

  71.         }catch(IOException e){  

  72.             // TODO: handle exception  

  73.             e.printStackTrace();          

  74.         }  

  75.         msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 5153, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   

  76.        

  77.         //设置项目符号  

  78.         msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0 ,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色  

  79.   

  80.         //设置图片  

  81.         Drawable drawable = getResources().getDrawable(R.drawable.icon);   

  82.         drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());    

  83.         msp.setSpan(new ImageSpan(drawable), 5357, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  

  84.           

  85.         mTextView.setText(msp);  

  86.         mTextView.setMovementMethod(LinkMovementMethod.getInstance());   

  87.     }  



你可能感兴趣的:(个人总结之SpannableString,处理textview不同样式)