android關鍵字特殊顏色顯示的實現

小小9575發表於2018-08-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));

 

相關文章