Android TextView 區域性文字變色

2021-07-29 00:05:18 字數 3001 閱讀 5931

textview 對於富文字效果的實現支援不支援呢?比如「區域性文字顏色的變動」,「區域性字型的變動」

一、需求效果

二、解決方案

針對這類問題,android提供了 spannablestringbuilder,方便我們自定義富文字的實現。

textview = (textview) findviewbyid(r.id

.textview);

spannablestringbuilder builder = new spannablestringbuilder(textview.gettext().tostring());

//foregroundcolorspan 為文字前景色,backgroundcolorspan為文字背景色

foregroundcolorspan redspan = new foregroundcolorspan(color.red);

foregroundcolorspan whitespan = new foregroundcolorspan(color.white);

foregroundcolorspan bluespan = new foregroundcolorspan(color.blue);

foregroundcolorspan greenspan = new foregroundcolorspan(color.green);

foregroundcolorspan yellowspan = new foregroundcolorspan(color.yellow);

builder.setspan(redspan, 0, 1, spannable.span_exclusive_exclusive);

builder.setspan(whitespan, 1, 2, spannable.span_inclusive_inclusive);

builder.setspan(bluespan, 2, 3, spannable.span_exclusive_exclusive);

builder.setspan(greenspan, 3, 4, spannable.span_exclusive_exclusive);

builder.setspan(yellowspan, 4,5, spannable.span_exclusive_exclusive);

textview.settext(builder);

除了上述**中使用的 foregroundcolorspan 和 backgroundcolorspan之外,還有以下這些span可以使用:

absolutesizespan(int size) —— 設定字型大小,引數是絕對數值,相當於word中的字型大小

relativesizespan(float proportion) —— 設定字型大小,引數是相對於預設字型大小的倍數,比如預設字型大小是x, 那麼設定後的字型大小就是x*proportion,這個用起來比較靈活,proportion>1就是放大(zoom in), proportion<1就是縮小(zoom out)

scalexspan(float proportion) —— 縮放字型,與上面的類似,預設為1,設定後就是原來的乘以proportion,大於1時放大(zoon in),小於時縮小(zoom out)

backgroundcolorspan(int color) —— 背景著色,引數是顏色數值,可以直接使用android.graphics.color裡面定義的常量,或是用color.rgb(int, int, int)

foregroundcolorspan(int color) —— 前景著色,也就是字的著色,引數與背景著色一致

typefacespan(string family) —— 字型,引數是字型的名字比如「sans」, 「sans-serif」等

stylespan(typeface style) —— 字型風格,比如粗體,斜體,引數是android.graphics.typeface裡面定義的常量,如typeface.bold,typeface.italic等等。strikethroughspan—-如果設定了此風格,會有一條線從中間穿過所有的字,就像被劃掉一樣

三、動手試試

比如實現下圖中textview的樣式

仿照上面的寫法,**很少就出來啦:

textview tv = (textview)view.findviewbyid(r.id

.toast_text);

string str1 = "提交成功!\n積分"

;string str2 = "+" + score1;

string str3 = "!審核通過後再"

;string str4 = "+" + score2;

spannablestringbuilder builder = new spannablestringbuilder(str1 + str2 + str3 + str4 + "!");

builder.setspan(new foregroundcolorspan(color.parsecolor("#ffffa200")),

str1.length(), (str1 + str2).length(), spannable.span_exclusive_inclusive);

builder.setspan(new foregroundcolorspan(color.parsecolor("#ffffa200")),

(str1 + str2 + str3).length(), (str1 + str2 + str3 + str4).length(), spannable.span_exclusive_inclusive);

tv.settext(builder);

android textview換行問題

應用中 textview包含年月日的時候 在一行內不能顯示完整時 文字內容會自動換行。這裡使用網上大家使用的方法,比如半形轉全形 過濾特殊字元等等都無效。最終的解決辦法是在年月日這裡加空格。eg 2013年11月28日20時22分 最終替換為 2013 年 11 月 28 日 20時22分 個人理解...

android textview功能列表

1 顯示富文字 url 文字大小 顏色 字型 autolink all phone web email map none string str i love china charsequeence cq html.fromhtml str textview.settext cq textview.s...

Android TextView屬性XML詳解

android ems 設定textview的寬度為n個字元的寬度。android maxems 設定textview的寬度為最長為n個字元的寬度。與ems同時使用時覆蓋ems選項。android minems 設定textview的寬度為最短為n個字元的寬度。與ems同時使用時覆蓋ems選項。an...