TextView中各個部分的文原本設置字體,大小,顏色,樣式

在Android中,TextView是咱們最經常使用的用來顯示文本的控件。

  通常狀況下,TextView中的文本都是一個樣式。那麼如何對於TextView中各個部分的文原本設置字體,大小,顏色,樣式,以及超級連接等屬性呢?下面咱們經過SpannableString的具體實例操做來演示一下。

res-layout-main.xml:
java

Java代碼 複製代碼 收藏代碼 android

  1. <?xml version="1.0" encoding="utf-8"?>   web

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  網絡

  3.     android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal">   app

  4. <TextView     ide

  5.     android:id="@+id/myTextView"  測試

  6.     android:layout_width="fill_parent"    字體

  7.     android:layout_height="wrap_content"    網站

  8.     />   google

  9. </LinearLayout>  

Java代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  3.     android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal">  

  4. <TextView    

  5.     android:id="@+id/myTextView"  

  6.     android:layout_width="fill_parent"   

  7.     android:layout_height="wrap_content"   

  8.     />  

  9. </LinearLayout>  



res-color-color.xml

res-color-linkcolor.xml:

Java代碼 複製代碼 收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>   

  2. <selector  xmlns:android="http://schemas.android.com/apk/res/android">   

  3.     <item android:state_pressed="true"  

  4.           android:color="#ffffff00"/> <!-- pressed -->   

  5.     <item android:state_focused="true"  

  6.           android:color="#ff00ffff"/> <!-- focused -->   

  7.     <item android:color="#ff0ff000"/> <!-- default -->   

  8. </selector>  

Java代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <selector  xmlns:android="http://schemas.android.com/apk/res/android">  

  3.     <item android:state_pressed="true"  

  4.           android:color="#ffffff00"/> <!-- pressed -->  

  5.     <item android:state_focused="true"  

  6.           android:color="#ff00ffff"/> <!-- focused -->  

  7.     <item android:color="#ff0ff000"/> <!-- default -->  

  8. </selector>  



TextViewLinkActivity:

Java代碼 複製代碼 收藏代碼

  1. import java.io.IOException;   

  2.   

  3. import org.xmlpull.v1.XmlPullParserException;   

  4.   

  5. import android.app.Activity;   

  6. import android.content.res.ColorStateList;   

  7. import android.content.res.XmlResourceParser;   

  8. import android.graphics.Bitmap;   

  9. import android.graphics.BitmapFactory;   

  10. import android.graphics.Color;   

  11. import android.graphics.drawable.Drawable;   

  12. import android.os.Bundle;   

  13. import android.text.SpannableString;   

  14. import android.text.Spanned;   

  15. import android.text.method.LinkMovementMethod;   

  16. import android.text.style.AbsoluteSizeSpan;   

  17. import android.text.style.BackgroundColorSpan;   

  18. import android.text.style.BulletSpan;   

  19. import android.text.style.DrawableMarginSpan;   

  20. import android.text.style.ForegroundColorSpan;   

  21. import android.text.style.IconMarginSpan;   

  22. import android.text.style.ImageSpan;   

  23. import android.text.style.RelativeSizeSpan;   

  24. import android.text.style.ScaleXSpan;   

  25. import android.text.style.StrikethroughSpan;   

  26. import android.text.style.StyleSpan;   

  27. import android.text.style.SubscriptSpan;   

  28. import android.text.style.SuperscriptSpan;   

  29. import android.text.style.TextAppearanceSpan;   

  30. import android.text.style.TypefaceSpan;   

  31. import android.text.style.URLSpan;   

  32. import android.text.style.UnderlineSpan;   

  33. import android.widget.TextView;   

  34.   

  35. public class TextViewLinkActivity extends Activity {   

  36.     TextView mTextView = null;      

  37.     SpannableString msp = null;     

  38.        

  39.     /** Called when the activity is first created. */  

  40.     @Override  

  41.     public void onCreate(Bundle savedInstanceState) {   

  42.         super.onCreate(savedInstanceState);   

  43.         setContentView(R.layout.main);   

  44.            

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

  46.            

  47.         //建立一個 SpannableString對象     

  48.         msp = new SpannableString("字體測試字體大小一半兩倍前景色背景色正常粗體斜體粗斜體下劃線刪除線x1x2電話郵件網站短信彩信地圖X軸綜合/bot");    

  49.            

  50.         //設置字體(default,default-bold,monospace,serif,sans-serif)   

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

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

  53.            

  54.         //設置字體大小(絕對值,單位:像素)    

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

  56.         msp.setSpan(new AbsoluteSizeSpan(20,true), 68, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //第二個參數boolean dip,若是爲true,表示前面的字體大小單位爲dip,不然爲像素,同上。   

  57.            

  58.         //設置字體大小(相對值,單位:像素) 參數表示爲默認字體大小的多少倍   

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

  60.         msp.setSpan(new RelativeSizeSpan(2.0f), 1012, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示默認字體大小的兩倍   

  61.            

  62.         //設置字體前景色   

  63.         msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 1215, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //設置前景色爲洋紅色   

  64.            

  65.         //設置字體背景色   

  66.         msp.setSpan(new BackgroundColorSpan(Color.CYAN), 1518, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //設置背景色爲青色   

  67.         

  68.         //設置字體樣式正常,粗體,斜體,粗斜體   

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

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

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

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

  73.            

  74.         //設置下劃線   

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

  76.            

  77.         //設置刪除線   

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

  79.            

  80.         //設置上下標   

  81.         msp.setSpan(new SubscriptSpan(), 3435, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下標      

  82.         msp.setSpan(new SuperscriptSpan(), 3637, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上標               

  83.            

  84.         //超級連接(須要添加setMovementMethod方法附加響應)   

  85.         msp.setSpan(new URLSpan("tel:4155551212"), 3739, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //電話      

  86.         msp.setSpan(new URLSpan("mailto:webmaster@google.com"), 3941, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //郵件      

  87.         msp.setSpan(new URLSpan("http://www.baidu.com"), 4143, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //網絡      

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

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

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

  91.            

  92.         //設置字體大小(相對值,單位:像素) 參數表示爲默認字體寬度的多少倍   

  93.         msp.setSpan(new ScaleXSpan(2.0f), 4951, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默認字體寬度的兩倍,即X軸方向放大爲默認字體的兩倍,而高度不變   

  94.            

  95.         //設置字體(依次包括字體名稱,字體大小,字體樣式,字體顏色,連接顏色)   

  96.         ColorStateList csllink = null;   

  97.         ColorStateList csl = null;   

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

  99.         try {   

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

  101.         }catch(XmlPullParserException e){   

  102.             // TODO: handle exception   

  103.             e.printStackTrace();           

  104.         }catch(IOException e){   

  105.             // TODO: handle exception   

  106.             e.printStackTrace();           

  107.         }   

  108.   

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

  110.         try {   

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

  112.         }catch(XmlPullParserException e){   

  113.             // TODO: handle exception   

  114.             e.printStackTrace();           

  115.         }catch(IOException e){   

  116.             // TODO: handle exception   

  117.             e.printStackTrace();           

  118.         }   

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

  120.         

  121.         //設置項目符號   

  122.         msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0 ,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一個參數表示項目符號佔用的寬度,第二個參數爲項目符號的顏色   

  123.   

  124.         //設置圖片   

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

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

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

  128.            

  129.         mTextView.setText(msp);   

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

  131.     }   

  132. }  

Java代碼  收藏代碼

  1. import java.io.IOException;  

  2.   

  3. import org.xmlpull.v1.XmlPullParserException;  

  4.   

  5. import android.app.Activity;  

  6. import android.content.res.ColorStateList;  

  7. import android.content.res.XmlResourceParser;  

  8. import android.graphics.Bitmap;  

  9. import android.graphics.BitmapFactory;  

  10. import android.graphics.Color;  

  11. import android.graphics.drawable.Drawable;  

  12. import android.os.Bundle;  

  13. import android.text.SpannableString;  

  14. import android.text.Spanned;  

  15. import android.text.method.LinkMovementMethod;  

  16. import android.text.style.AbsoluteSizeSpan;  

  17. import android.text.style.BackgroundColorSpan;  

  18. import android.text.style.BulletSpan;  

  19. import android.text.style.DrawableMarginSpan;  

  20. import android.text.style.ForegroundColorSpan;  

  21. import android.text.style.IconMarginSpan;  

  22. import android.text.style.ImageSpan;  

  23. import android.text.style.RelativeSizeSpan;  

  24. import android.text.style.ScaleXSpan;  

  25. import android.text.style.StrikethroughSpan;  

  26. import android.text.style.StyleSpan;  

  27. import android.text.style.SubscriptSpan;  

  28. import android.text.style.SuperscriptSpan;  

  29. import android.text.style.TextAppearanceSpan;  

  30. import android.text.style.TypefaceSpan;  

  31. import android.text.style.URLSpan;  

  32. import android.text.style.UnderlineSpan;  

  33. import android.widget.TextView;  

  34.   

  35. public class TextViewLinkActivity extends Activity {  

  36.     TextView mTextView = null;     

  37.     SpannableString msp = null;    

  38.       

  39.     /** Called when the activity is first created. */  

  40.     @Override  

  41.     public void onCreate(Bundle savedInstanceState) {  

  42.         super.onCreate(savedInstanceState);  

  43.         setContentView(R.layout.main);  

  44.           

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

  46.           

  47.         //建立一個 SpannableString對象    

  48.         msp = new SpannableString("字體測試字體大小一半兩倍前景色背景色正常粗體斜體粗斜體下劃線刪除線x1x2電話郵件網站短信彩信地圖X軸綜合/bot");   

  49.           

  50.         //設置字體(default,default-bold,monospace,serif,sans-serif)  

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

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

  53.           

  54.         //設置字體大小(絕對值,單位:像素)   

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

  56.         msp.setSpan(new AbsoluteSizeSpan(20,true), 68, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //第二個參數boolean dip,若是爲true,表示前面的字體大小單位爲dip,不然爲像素,同上。  

  57.           

  58.         //設置字體大小(相對值,單位:像素) 參數表示爲默認字體大小的多少倍  

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

  60.         msp.setSpan(new RelativeSizeSpan(2.0f), 1012, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示默認字體大小的兩倍  

  61.           

  62.         //設置字體前景色  

  63.         msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 1215, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //設置前景色爲洋紅色  

  64.           

  65.         //設置字體背景色  

  66.         msp.setSpan(new BackgroundColorSpan(Color.CYAN), 1518, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //設置背景色爲青色  

  67.        

  68.         //設置字體樣式正常,粗體,斜體,粗斜體  

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

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

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

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

  73.           

  74.         //設置下劃線  

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

  76.           

  77.         //設置刪除線  

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

  79.           

  80.         //設置上下標  

  81.         msp.setSpan(new SubscriptSpan(), 3435, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下標     

  82.         msp.setSpan(new SuperscriptSpan(), 3637, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上標              

  83.           

  84.         //超級連接(須要添加setMovementMethod方法附加響應)  

  85.         msp.setSpan(new URLSpan("tel:4155551212"), 3739, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //電話     

  86.         msp.setSpan(new URLSpan("mailto:webmaster@google.com"), 3941, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //郵件     

  87.         msp.setSpan(new URLSpan("http://www.baidu.com"), 4143, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //網絡     

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

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

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

  91.           

  92.         //設置字體大小(相對值,單位:像素) 參數表示爲默認字體寬度的多少倍  

  93.         msp.setSpan(new ScaleXSpan(2.0f), 4951, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默認字體寬度的兩倍,即X軸方向放大爲默認字體的兩倍,而高度不變  

  94.           

  95.         //設置字體(依次包括字體名稱,字體大小,字體樣式,字體顏色,連接顏色)  

  96.         ColorStateList csllink = null;  

  97.         ColorStateList csl = null;  

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

  99.         try {  

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

  101.         }catch(XmlPullParserException e){  

  102.             // TODO: handle exception  

  103.             e.printStackTrace();          

  104.         }catch(IOException e){  

  105.             // TODO: handle exception  

  106.             e.printStackTrace();          

  107.         }  

  108.   

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

  110.         try {  

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

  112.         }catch(XmlPullParserException e){  

  113.             // TODO: handle exception  

  114.             e.printStackTrace();          

  115.         }catch(IOException e){  

  116.             // TODO: handle exception  

  117.             e.printStackTrace();          

  118.         }  

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

  120.        

  121.         //設置項目符號  

  122.         msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0 ,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一個參數表示項目符號佔用的寬度,第二個參數爲項目符號的顏色  

  123.   

  124.         //設置圖片  

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

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

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

  128.           

  129.         mTextView.setText(msp);  

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

  131.     }  

  132. }  



效果預覽:

相關文章
相關標籤/搜索