android關鍵字特殊顏色顯示的實現
阿新 • • 發佈:2019-01-27
在我們做開發的過程中,經常會遇到一段文字中間的幾個字需要用特殊顏色或者大小等顯示,有很多剛入門的開發沒有頭緒,下面我介紹幾種常用的實現方法,首先上效果圖:
一、多TextView方式
這種方式的好處是思路簡單,壞處是如果這段文字不止一行佈局很是困難,所以本地寫死的簡短文字可以採用,直接xml寫就行了。
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="前面的部分"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#ff0000" android:text="關鍵字"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="後面的部分"/> </LinearLayout>
二、使用SpannableString
這種方式比較靈活,擴充套件性好,有不依賴html標籤,對java開發來說好理解。
<TextView
android:id="@+id/tv_spannableString"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
/>
tv_spannableString = (TextView) findViewById(R.id.tv_spannableString); //建立SpannableString物件 SpannableString spannableString = new SpannableString("前面的部分關鍵字後面的部分"); //設定顏色 spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")), 5, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv_spannableString.setText(spannableString);
這裡把一些常用的SpannableString的方法也放進來
//設定字型大小,true表示前面的字型大小20單位為dip spannableString.setSpan(new AbsoluteSizeSpan(20, true), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設定連結 spannableString.setSpan(new URLSpan("www.baidu.com"), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設定字型,BOLD為粗體 spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
三、使用Html標籤
因為TextView是支援載入Html標籤的,一些android的富文字編輯器也是基於這個方式,所以用這種方式也可以實現,缺點就是要求我們懂一點html標籤的用法。
<TextView
android:id="@+id/tv_html"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
/>
tv_html = (TextView) findViewById(R.id.tv_html);
String str = String.format("前面的部分<font color='#ff0000'>關鍵字</font>後面的部分");
tv_html.setText(Html.fromHtml(str));