實(shí)現(xiàn)方式?jīng)]有引入任何依賴,輕量級(jí)實(shí)現(xiàn)需求效果
最近遇到一個(gè)需求,需要做一個(gè)搜索功能。搜索的內(nèi)容需要加粗顯示。
完成了這個(gè)功能后,寫下此博客,記錄一下實(shí)現(xiàn)過程
效果圖

首先自定義一個(gè)StyleSpan,在StyleSpan里做加粗的等匹配狀態(tài)的設(shè)置
@SuppressLint("ParcelCreator")public class SearchStyleSpan extends StyleSpan { public SearchStyleSpan(int style) { super(style); } @Override public void updateDrawState(TextPaint ds) { ds.setFakeBoldText(true); //FIXME 這里還可以做其他差異性設(shè)置(修改文字大小等) super.updateDrawState(ds); } @Override public void updateMeasureState(TextPaint paint) { paint.setFakeBoldText(true); super.updateMeasureState(paint); }}監(jiān)聽編輯框的內(nèi)容變化
mEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable editable) { checkSearchContent(mEditText.getText().toString()); } });通過循環(huán),將TextView 里的文字根據(jù)匹配內(nèi)容分段
SpannableStringBuilder searchStyle = new SpannableStringBuilder(); int start; while (content.contains(searchContent)) { start = content.indexOf(searchContent); searchStyle.append(getBoldSpannable(content.substring(0, start + searchContent.length()), searchContent)); content = content.substring(start + searchContent.length()); } searchStyle.append(content);將分段好的文字進(jìn)行加粗處理
int start = content.indexOf(searchContent); SpannableStringBuilder ssb = new SpannableStringBuilder(content); ssb.setSpan(new SearchStyleSpan(Typeface.NORMAL), start, start + searchContent.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
源碼地址:https://github.com/TitleZWC/BoldSpannable
以上所述是小編給大家介紹的Android 開發(fā)中根據(jù)搜索內(nèi)容實(shí)現(xiàn)TextView中的文字部分加粗,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選