給你的TextView中的部分文字加入沒有下劃線的超連結
阿新 • • 發佈:2018-12-12
專案優化,當網路請求失敗時加上提醒,並可以點選TextView中的“重新整理”兩個字再次請求。使用ClickableSpan對超連結進行設定。預設情況下的樣式是這樣的:
想要的樣式是這樣的:
我們使用預設ClickableSpan的方法如下:
SpannableStringBuilder builder = new SpannableStringBuilder("(╯︵╰)\n網路走丟了,請重新整理試試"); int i = "(╯︵╰)\n網路走丟了,請重新整理試試".indexOf("刷"); builder.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { page = 0; httpGetList(HTTP_GETDETAILDATA); } },i,i+2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); noData_detailData.setText(builder); noData_detailData.setMovementMethod(LinkMovementMethod.getInstance()); Utils.setToast(context, "網路偷了會兒懶,請稍後重試");
這些程式碼中最需要強調的就是
noData_detailData.setMovementMethod(LinkMovementMethod.getInstance());
這一行是必須的,不然能夠顯示樣式,但是沒法實現點選效果。
很明顯預設的樣式無法滿足我們的需要了,現在實現自定義的樣式:
自定義NoUnderLineClickableSpan繼承自ClickableSpan,來看一下ClickableSpan的原始碼:
/** * If an object of this type is attached to the text of a TextView * with a movement method of LinkMovementMethod, the affected spans of * text can be selected. If clicked, the {@link #onClick} method will* be called. */ public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance { /** * Performs the click action associated with this span. */ public abstract void onClick(View widget); /** * Makes the text underlined and in the link color. */ @Override public void updateDrawState(TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText(true); } }
這個類中只有兩個方法,onClick方法是我們需要實現的方法,很明顯是我們點選文字後要乾的事,我這裡就是通過http請求資料。
第二個方法是我們自定義的重點,也很簡單嘛,只有兩行,ds.setColor肯定是在設定超連結文字的顏色,也就是專案中“重新整理”這兩個字的顏色。ds.setUnderlineText,看名字也知道是在設定下劃線,傳入boolean值,當傳入true時超連結文字將會顯示下劃線,當傳入false時超連結文字將不會顯示下劃線,就是這麼簡單。
下面是專案中自定義的NoUnderlineClickableSpan的程式碼:
/** * 自定義沒有下劃線,文字是藍色的ClickableSpan * Created by Qiju on 2017/10/16. * */ public class NoUnderLineClickableSpan extends ClickableSpan { @Override public void onClick(View widget) { } /** * 設定超連結顏色為藍色,沒有下劃線 * @param ds */ @Override public void updateDrawState(TextPaint ds) { ds.setColor(Color.BLUE); ds.setUnderlineText(false); } }