Android 搜尋結果匹配關鍵字且高亮顯示功能

NO IMAGE

1. 單關鍵字 匹配

如果只是單關鍵字的話,那麼我們先計算出他的下標,它的長度,然後就可以標記下標到下標 長度的這一段為特殊顏色即可,程式碼如下:


if (name != null && name.contains(keyWord)) { 
int index = name.indexOf(keyWord); 
int len = keyWord.length(); 
Spanned temp = Html.fromHtml(name.substring(0, index) 
"<font color=#FF0000>" 
name.substring(index, index   len)   "</font>" 
name.substring(index   len, name.length()));
}

temp 即是改變後的字,keyWord就加了紅色。

2.多關鍵字匹配

有的時候我們做搜尋的時候 是需要將 使用者輸入的關鍵字 在服務端做拆分 ,拆分為多個關鍵字去搜尋。那麼服務端返回資料的時候 關鍵字被拆分為多個。也就是返回的是一個 關鍵字陣列。

這種情況我們在客戶端做 關鍵字匹配的時候就要寫一個演算法,將段落中的多個關鍵字全部匹配並且標出來。

程式碼如下:

adapter裡面邏輯:


/** 
name是item顯示內容 當前item顯示字串內容 
keyList 是指存放 多個關鍵字的list集合 
*/ 
StringBuffer str = new StringBuffer(""); 
str = Utils.addChild(name, keyList, str); 
holder.contentTv.setText(Html.fromHtml(str.toString())); 

下面是匹配:


/** 
* 多關鍵字查詢表紅,避免後面的關鍵字成為特殊的HTML語言程式碼 
* @param str  檢索結果 
* @param inputs 關鍵字集合 
* @param resStr 表紅後的結果 
*/ 
public static StringBuffer addChild(String str,List<String> inputs,StringBuffer resStr){ 
int index=str.length();//用來做為標識,判斷關鍵字的下標 
String next="";//儲存str中最先找到的關鍵字 
for (int i = inputs.size() -1 ; i>= 0;i--) { 
String theNext=inputs.get(i); 
int theIndex=str.indexOf(theNext); 
if(theIndex==-1){//過濾掉無效關鍵字 
inputs.remove(i); 
}else if(theIndex<index){ 
index=theIndex;//替換下標 
next=theNext; 
} 
} 
//如果條件成立,表示串中已經沒有可以被替換的關鍵字,否則遞迴處理 
if(index==str.length()){ 
resStr.append(str); 
}else{ 
resStr.append(str.substring(0,index)); 
resStr.append("<font color='#FF0000'>" str.substring(index,index next.length()) "</font>"); 
String str1=str.substring(index next.length(),str.length()); 
addChild(str1,inputs,resStr);//剩餘的字串繼續替換 
} 
return resStr; 
}

以上所述是小編給大家介紹的Android 搜尋結果匹配關鍵字且高亮顯示功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對指令碼之家網站的支援!

您可能感興趣的文章:

Android 正規表示式驗證手機號、姓名(包含少數民族)、身份證號Android 中使用ContentObserver模式獲取簡訊用正則自動填充驗證碼Android判斷11位手機號碼的方法(正規表示式)Android正規表示式Android中手機號、車牌號正規表示式大全Android實現自動匹配關鍵字並且標紅功能Android Java實現餘弦匹配演算法示例程式碼Android程式設計中號碼匹配位數修改的方法從Android原始碼剖析Intent查詢匹配的實現Android程式設計開發中的正則匹配操作示例