1. 程式人生 > >關於TextView中修改部分字型顏色、大小方法的總結

關於TextView中修改部分字型顏色、大小方法的總結

TextView屬性描述

  1. 屬性名稱    描述  
  2. android:autoLink    設定是否當文字為URL連結/email/電話號碼/map時,文字顯示為可點選的連結。可選值(none/web/email/phone/map/all)  
  3. android:autoText    如果設定,將自動執行輸入值的拼寫糾正。此處無效果,在顯示輸入法並輸入的時候起作用。  
  4. android:bufferType  指定getText()方式取得的文字類別。選項editable 類似於StringBuilder可追加字元,  
  5. 也就是說getText後可呼叫append方法設定文字內容。spannable 則可在給定的字元區域使用樣式,參見這裡1
    、這裡2。  
  6. android:capitalize  設定英文字母大寫型別。此處無效果,需要彈出輸入法才能看得到,參見EditView此屬性說明。  
  7. android:cursorVisible   設定游標為顯示/隱藏,預設顯示。  
  8. android:digits  設定允許輸入哪些字元。如“1234567890.+-*/%\n()”  
  9. android:drawableBottom  在text的下方輸出一個drawable,如圖片。如果指定一個顏色的話會把text的背景設為該顏色,並且同時和background使用時覆蓋後者。  
  10. android:drawableLeft    在text的左邊輸出一個drawable,如圖片。  
  11. android:drawablePadding 設定text與drawable(圖片)的間隔,與drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可設定為負數,單獨使用沒有效果。  
  12. android:drawableRight   在text的右邊輸出一個drawable,如圖片。  
  13. android:drawableTop 在text的正上方輸出一個drawable,如圖片。  
  14. android:editable    設定是否可編輯。這裡無效果,參見EditView。  
  15. android:editorExtras    設定文字的額外的輸入資料。在EditView再討論。  
  16. android:ellipsize   設定當文字過長時,該控制元件該如何顯示。有如下值設定:”start”—–省略號顯示在開頭;”end”——省略號顯示在結尾;”middle”—-省略號顯示在中間;”marquee” ——以跑馬燈的方式顯示(動畫橫向移動)  
  17. android:freezesText 設定儲存文字的內容以及游標的位置。參見:這裡。  
  18. android:gravity 設定文字位置,如設定成“center”,文字將居中顯示。  
  19. android:hint    Text為空時顯示的文字提示資訊,可通過textColorHint設定提示資訊的顏色。此屬性在EditView中使用,但是這裡也可以用。  
  20. android:imeOptions  附加功能,設定右下角IME動作與編輯框相關的動作,如actionDone右下角將顯示一個“完成”,而不設定預設是一個回車符號。這個在EditView中再詳細說明,此處無用。  
  21. android:imeActionId 設定IME動作ID。在EditView再做說明,可以先看這篇帖子:這裡。  
  22. android:imeActionLabel  設定IME動作標籤。在EditView再做說明。  
  23. android:includeFontPadding  設定文字是否包含頂部和底部額外空白,預設為true。  
  24. android:inputMethod 為文字指定輸入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是這裡報錯找不到。  
  25. android:inputType   設定文字的型別,用於幫助輸入法顯示合適的鍵盤型別。在EditView中再詳細說明,這裡無效果。  
  26. android:marqueeRepeatLimit  在ellipsize指定marquee的情況下,設定重複滾動的次數,當設定為marquee_forever時表示無限次。  
  27. android:ems 設定TextView的寬度為N個字元的寬度。這裡測試為一個漢字字元寬度,如圖:   
  28. android:maxEms  設定TextView的寬度為最長為N個字元的寬度。與ems同時使用時覆蓋ems選項。  
  29. android:minEms  設定TextView的寬度為最短為N個字元的寬度。與ems同時使用時覆蓋ems選項。  
  30. android:maxLength   限制顯示的文字長度,超出部分不顯示。  
  31. android:lines   設定文字的行數,設定兩行就顯示兩行,即使第二行沒有資料。  
  32. android:maxLines    設定文字的最大顯示行數,與width或者layout_width結合使用,超出部分自動換行,超出行數將不顯示。  
  33. android:minLines    設定文字的最小行數,與lines類似。  
  34. android:linksClickable  設定連結是否點選連線,即使設定了autoLink。  
  35. android:lineSpacingExtra    設定行間距。  
  36. android:lineSpacingMultiplier   設定行間距的倍數。如”1.2”  
  37. android:numeric 如果被設定,該TextView有一個數字輸入法。此處無用,設定後唯一效果是TextView有點選效果,此屬性在EdtiView將詳細說明。  
  38. android:password    以小點”.”顯示文字  
  39. android:phoneNumber 設定為電話號碼的輸入方式。  
  40. android:privateImeOptions   設定輸入法選項,此處無用,在EditText將進一步討論。  
  41. android:scrollHorizontally  設定文字超出TextView的寬度的情況下,是否出現橫拉條。  
  42. android:selectAllOnFocus    如果文字是可選擇的,讓他獲取焦點而不是將游標移動為文字的開始位置或者末尾位置。TextView中設定後無效果。  
  43. android:shadowColor 指定文字陰影的顏色,需要與shadowRadius一起使用。效果:    
  44. android:shadowDx    設定陰影橫向座標開始位置。  
  45. android:shadowDy    設定陰影縱向座標開始位置。  
  46. android:shadowRadius    設定陰影的半徑。設定為0.1就變成字型的顏色了,一般設定為3.0的效果比較好。  
  47. android:singleLine  設定單行顯示。如果和layout_width一起使用,當文字不能全部顯示時,後面用“…”來表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"將只顯示“t…”。如果不設定singleLine或者設定為false,文字將自動換行  
  48. android:text    設定顯示文字.  
  49. android:textAppearance  設定文字外觀。如“?android:attr/textAppearanceLargeInverse  
  50. ”這裡引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用預設的外觀。可設定的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse  
  51. android:textColor   設定文字顏色  
  52. android:textColorHighlight  被選中文字的底色,預設為藍色  
  53. android:textColorHint   設定提示資訊文字的顏色,預設為灰色。與hint一起使用。  
  54. android:textColorLink   文字連結的顏色.  
  55. android:textScaleX  設定文字之間間隔,預設為1.0f。分別設定0.5f/1.0f/1.5f/2.0f效果如下:  
  56. android:textSize    設定文字大小,推薦度量單位”sp”,如”15sp”  
  57. android:textStyle   設定字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設定一個或多個,用“|”隔開  
  58. android:typeface    設定文字字型,必須是以下常量值之一:normal 0, sans 1, serif 2, monospace(等寬字型) 3]   
  59. android:height  設定文字區域的高度,支援度量單位:px(畫素)/dp/sp/in/mm(毫米)  
  60. android:maxHeight   設定文字區域的最大高度  
  61. android:minHeight   設定文字區域的最小高度  
  62. android:width   設定文字區域的寬度,支援度量單位:px(畫素)/dp/sp/in/mm(毫米),與layout_width的區別看這裡。  
  63. android:maxWidth    設定文字區域的最大寬度  
  64. android:minWidth    設定文字區域的最小寬度 

  1. textView = (TextView) findViewById(R.id.textview);  
  2. SpannableStringBuilder builder = new SpannableStringBuilder(textView.getText().toString());  
  3. //ForegroundColorSpan 為文字前景色,BackgroundColorSpan為文字背景色
  4. ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);  
  5. ForegroundColorSpan whiteSpan = new ForegroundColorSpan(Color.WHITE);  
  6. ForegroundColorSpan blueSpan = new ForegroundColorSpan(Color.BLUE);  
  7. ForegroundColorSpan greenSpan = new ForegroundColorSpan(Color.GREEN);  
  8. ForegroundColorSpan yellowSpan = new ForegroundColorSpan(Color.YELLOW);  
  9. builder.setSpan(redSpan, 01, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  10. builder.setSpan(whiteSpan, 12, Spannable.SPAN_INCLUSIVE_INCLUSIVE);  
  11. builder.setSpan(blueSpan, 23, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  12. builder.setSpan(greenSpan, 34, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  13. builder.setSpan(yellowSpan, 4,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  14. textView.setText(builder);  

我想把TextView設定成如下圖所示的效果,一開始我是想用textView.setText("已為<font size=18sp>88</font>位")類似的程式碼實現,於是發現Android自帶的這樣一個方法Html.fromHtml(),即可以實現在文字裡加入html標籤的樣式,但是該方法font標籤並沒有size這個屬性,只有color和face。因此只能通過big和small來控制字型大小,程式碼如下:textView.setText(Html.fromHtml("今日已為<big>88</big>位")); 即可改變部分字型大小。


方法詳解必看

A. 

SpannableStringBuilder style=new SpannableStringBuilder(str);
//SpannableStringBuilder實現CharSequence介面
style.setSpan(new ForegroundColorSpan(Color.RED), 0, 2,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );
style.setSpan(new ForegroundColorSpan(Color.YELLOW), 2, 4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );
style.setSpan(new ForegroundColorSpan(Color.GREEN), 4, 6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );
tv.setText(style);//將其新增到tv中 

String html = "預計收益<font color='#ff0000'>"+et_buy_sum.getText().toString()+"</font>";
tv_profit_think.setText(Html.fromHtml(html));

B

  1. TextView textView1 = (TextView) findViewById(R.id.textView1);  
  2.         TextView textView2 = (TextView) findViewById(R.id.textView2);  
  3.         TextView textView3 = (TextView) findViewById(R.id.textView3);  
  4.         TextView textView4 = (TextView) findViewById(R.id.textView4);  
  5.         //兩次加大字型,設定字型為紅色(big會加大字號,font可以定義顏色)
  6.         textView1.setText(Html.fromHtml("北京市釋出霾黃色預警,<font color='#ff0000'><big><big>外出攜帶好</big></big></font>口罩"));  
  7.         //設定字型大小為3級標題,設定字型為紅色
  8.         textView2.setText(Html.fromHtml("北京市釋出霾黃色預警,<h3><font color='#ff0000'>外出攜帶好</font></h3>口罩"));  
  9.         //設定字型大小為58(單位為物理畫素),設定字型為紅色,字型背景為黃色
  10.         textView3.setText("北京市釋出霾黃色預警,外出攜帶好口罩");  
  11.         Spannable span = new SpannableString(textView3.getText());  
  12.         span.setSpan(new AbsoluteSizeSpan(58), 1116, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  13.         span.setSpan(new ForegroundColorSpan(Color.RED), 1116, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  14.         span.setSpan(new BackgroundColorSpan(Color.YELLOW), 1116, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  15.         textView3.setText(span);  
  16.         //兩次縮小字型,設定字型為紅色(small可以減小字號)
  17.         textView4.setText(Html.fromHtml("北京市釋出霾黃色預警,<font color='#ff0000'><small><small>外出攜帶好</small></small></font>口罩")); 

  1. textView = (TextView) findViewById(R.id.textview);  
  2. SpannableStringBuilder builder = new SpannableStringBuilder(textView.getText().toString());  
  3. //ForegroundColorSpan 為文字前景色,BackgroundColorSpan為文字背景色
  4. ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);  
  5. ForegroundColorSpan whiteSpan = new ForegroundColorSpan(Color.WHITE);  
  6. ForegroundColorSpan blueSpan = new ForegroundColorSpan(Color.BLUE);  
  7. ForegroundColorSpan greenSpan = new ForegroundColorSpan(Color.GREEN);  
  8. ForegroundColorSpan yellowSpan = new ForegroundColorSpan(Color.YELLOW);  
  9. builder.setSpan(redSpan, 01, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  10. builder.setSpan(whiteSpan, 12, Spannable.SPAN_INCLUSIVE_INCLUSIVE);  
  11. builder.setSpan(blueSpan, 23, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  12. builder.setSpan(greenSpan, 34, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  13. builder.setSpan(yellowSpan, 4,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  14. textView.setText(builder);  


步驟如下:

     1.定義不同style .

不妨如下定義2個style

  1. <stylename="style0">
  2.     <itemname="android:textSize">19dip</item>
  3.     <itemname="android:textColor">@color/color1</item>
  4.        </style>
  5. <stylename="style1">
  6.     <itemname="android:textSize">23dip</item>
  7.     <itemname="android:textColor">@color/color2</item>
  8.     <itemname="android:textStyle">italic</item>
  9. </style>

 2 . 通過SpannableString 設定字串格式。程式碼如下:

  1. <span style="white-space:pre">        </span>mTextView = (TextView)findViewById(R.id.test);  
  2.          SpannableString styledText = new SpannableString("親愛的小寶,你好");  
  3.          styledText.setSpan(new TextAppearanceSpan(this, R.style.style0), 03, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  4.          styledText.setSpan(new TextAppearanceSpan(this, R.style.style1), 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  5.         mTextView.setText(styledText, TextView.BufferType.SPANNABLE);  

實際效果如下: