Android 開發(fā)中根據(jù)搜索內容實現(xiàn)TextView中的文字部分加粗
實現(xiàn)方式沒有引入任何依賴,輕量級實現(xiàn)需求效果
最近遇到一個需求,需要做一個搜索功能。搜索的內容需要加粗顯示。
完成了這個功能后,寫下此博客,記錄一下實現(xiàn)過程
效果圖

首先自定義一個StyleSpan,在StyleSpan里做加粗的等匹配狀態(tài)的設置
@SuppressLint("ParcelCreator")
public class SearchStyleSpan extends StyleSpan {
public SearchStyleSpan(int style) {
super(style);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setFakeBoldText(true);
//FIXME 這里還可以做其他差異性設置(修改文字大小等)
super.updateDrawState(ds);
}
@Override
public void updateMeasureState(TextPaint paint) {
paint.setFakeBoldText(true);
super.updateMeasureState(paint);
}
}
監(jiān)聽編輯框的內容變化
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ù)匹配內容分段
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);
將分段好的文字進行加粗處理
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ù)搜索內容實現(xiàn)TextView中的文字部分加粗,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
Android開發(fā)No Focused Window ANR產生原理解析
這篇文章主要為大家介紹了Android開發(fā)No Focused Window ANR產生原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
Android實戰(zhàn)教程第四篇之簡單實現(xiàn)短信發(fā)送器
這篇文章主要為大家詳細介紹了Android實戰(zhàn)教程第四篇之簡單實現(xiàn)短信發(fā)送器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11

